带虚拟键盘的QFileDialog

时间:2019-03-06 10:23:05

标签: qt qfiledialog

是否可以检测文件名文本编辑何时获得焦点? 输入文本编辑后,我需要显示一个虚拟键盘

谢谢

1 个答案:

答案 0 :(得分:1)

这不是一个精确的解决方案,但是这是一种很hacky的方法,它可以正常工作-import javax.swing.*; import java.util.*; public class Aufgabe42 { public static void main(String[] args) { //Declare variable String input, output, requestNumber; double[] arrayNumber; int size; //Input input = JOptionPane.showInputDialog(null, "Type in the size of the array."); //Variable Initialization size = Integer.parseInt(input); arrayNumbers = new double[size]; //Request numbers for(int i = 0; i < size; i++) { requestNumber = JOptionPane.showInputDialog(null, "Tell me a number:"); arrayNumber[i] = Double.parseDouble(requestNumber); } String returnAverage; //Initialization and Output output = Double.toString(JOptionPane.showMessageDialog(null, "The Average is: " + getAverage(arrayNumber))); System.exit(0); } public static double getAverage(double[] arrayNumber) { //Declare variable double arraySum,average; //Initialization arraySum = 0; returnAverage = Double.toString(average); //Sum array values for(int i = 0; i < arrayZNumber.length; i++) { arraySum += arrayNumber[i]; } //Calculate Average average = arraySum / arrayNumber.length; return average; } } 也是一个带有子级的小部件,因此您可以访问该文件名QFileDialog并做任何需要的事情。

类似... QLineEdit 消息过滤器会更好,因为它不需要其他操作或更改对话框的行为。

QLineEdit* lineEdit = dlg->findChild<QLineEdit*>();

仍然需要对正确的事件处理进行一些调整,尝试使用最简单的演示,但仍然有效:

QLineEdit* lineEdit = dlg->findChild<QLineEdit*>();
FocusEater* filter = new FocusEater(this);
lineEdit->installEventFilter(filter);

connect(filter, &FocusEater::gotFocus, [](){
    QMessageBox::information(nullptr, "FUU", "BAR");
});

实际上,要实现自定义文件对话框不是很困难,具体取决于假定的自定义量,但是“焦点检测”也可以。