为什么 QFileDialog::selectFile 不起作用?
Why QFileDialog::selectFile doesn't work?
我正在使用Qt 5.12,并试图编写测试(使用QTest)以打开以某种xml格式存储的项目。
在测试中,我使用QTimer::singleShot
等待QFileDialog
出现,如锁定线程中QTest在QT关闭窗口中建议的那样。
问题是QFileDialog::selectFile
没有选择任何内容这意味着"确定"按钮未激活,因此我无法在测试中单击它。
在下面的示例中,我假设文件的完整路径是/tmp/project.xml
。请注意,QFileDialog::setDirectory
工作得很好:当下面的示例开始时,您所在的是/tmp
目录,而不是/
。
#include <QApplication>
#include <QFileDialog>
#include <QTimer>
int main(int argc, char *argv[])
{
QApplication a(argc, argv);
QTimer::singleShot(300, []() {
QWidget* window = nullptr;
while (!window) {
window = qApp->activeModalWidget();
}
QFileDialog* fd = qobject_cast<QFileDialog*>(window);
fd->setDirectory("/tmp");
fd->selectFile("project.xml");
});
QString path = QFileDialog::getOpenFileName(nullptr, "Open Project",
"/", QString(),
nullptr, QFileDialog::DontUseNativeDialog);
}
函数selectFile不起作用,因为文件名文本框(lineEdit)是焦点。此行为来自QFileDialog::selectFile():的实现
void QFileDialog::selectFile(const QString &filename)
{
// ... function body
//Put the filename into the lineEdit when :
//1. The dialog is not visible or
//2. The lineEdit is not focused.
if (!isVisible() || !d->lineEdit()->hasFocus())
d->lineEdit()->setText(index.isValid() ? index.data().toString() : fileFromPath(d->rootPath(), filename));
}
要使程序正常工作,有两种方法:
- 将文件名直接放在文本框中
将焦点移开,然后致电selectFile
fd->setDirectory("/tmp"); QLineEdit * lineEdit = qobject_cast<QLineEdit*>(fd->focusWidget()); if( lineEdit ){ //Method 1 lineEdit->setText("project.xml"); //Method 2 lineEdit->nextInFocusChain()->setFocus(); fd->selectFile("project.xml"); }else { //no lineEdit focus found fd->selectFile("project.xml"); }
相关文章:
- 我的神经网络不起作用 [XOR 问题]
- 在C++程序中输入的文本文件将不起作用,除非文本被复制和粘贴
- C++映射:具有自定义类的运算符[]不起作用(总是返回0)
- C++为什么尽管我调用了void函数,它却不起作用
- 为什么在保护模式下继承升级不起作用
- 循环在计数器中不起作用
- 在其他文件中创建类时在 c++ 项目中不起作用
- Visual studio代码重构似乎不起作用(例如,重命名符号-f2)
- 为什么二进制搜索在我的测试中不起作用
- 我的代码中有错误吗?使用BGI图形的C++代码对我不起作用
- 为什么 const std::p air<K,V>& 在 std::map 上基于范围的 for 循环不起作用?
- 带有指定长度字符* 参数的 std::regex_search 在 VS2017 中不起作用?
- Bjarne Stroustrup Book - std_lib_facilities.h - 不起作用(未知类型名称)
- 为什么简单的算术减法在"if"条件下不起作用?
- 为什么Stroustup书中的has_f不起作用
- 你能检查一下为什么在这个代码中从链接列表中删除项目不起作用吗
- 嵌套While循环不起作用(C++问题)
- C++Matching Brackets 2解决方案不起作用
- 为什么这段代码不起作用,我该如何解决?
- 为什么 QFileDialog::selectFile 不起作用?