C++ 如何使用Qt测试控制QFileDialog?
我有两个问题:C++ 如何使用Qt测试控制QFileDialog?,c++,qt,qfiledialog,qttest,C++,Qt,Qfiledialog,Qttest,我有两个问题: 如何使用Qt测试模块访问QFileDialog并在“文件名”字段中写入文件路径 我这样问是因为我正在Qt中开发一些GUI测试,现在我需要打开一个文本文件。以下代码创建QFileDialog并获取文件路径: QString filePath = QFileDialog::getOpenFileName( this, "Open",
QFileDialog
并在“文件名”字段中写入文件路径
我这样问是因为我正在Qt中开发一些GUI测试,现在我需要打开一个文本文件。以下代码创建QFileDialog
并获取文件路径:
QString filePath = QFileDialog::getOpenFileName(
this,
"Open",
"",
tr("Text Files (*.txt)") );
QThread
)加载此文本文件中的内容,我如何在GUI测试中等待此线程完成
我知道我可以使用QTest::qSleep(毫秒)代码>命令,但我认为在这种情况下这不是一个好的实践
testFile
属性设置为文件路径,如果设置了该属性,则对象可以跳过请求文件
const char k_testFile[] = "k_testFile";
MyClass::foo() {
...
auto testFile = property(k_testFile);
auto filePath = testFile.isNull()
? QFileDialog::getOpenFilePath(...)
: testFile.toString();
...
}
QString filePath = ...;
QtConcurrent::run(ioPool, [this, filePath]{
auto data = MyLoader::load(filePath);
emit haveFileData(data);
});
调用此代码的类应该有一个haveFileData信号,其他一些代码连接到该信号,并根据需要进行处理。ioPool
是用于I/O绑定操作的线程池,如果希望全局池成为I/O池,则可以是QThredPool::globalInstance()
。CPU和I/O绑定的线程池应该是分开的你是说Qt测试模块,对吗?是的,Qt测试模块。谢谢,库巴。1.我不知道什么是“测试挂钩”,但我会搜索它。2.这不是我的项目当前的选项。:/3.我不太明白这个选择。我正在使用Windows平台进行开发,但是应用程序是多平台的,因此,我认为这对我来说不是一个有效的选择。您需要添加测试挂钩,以便在您测试的每个平台上操作平台对话框。在Windows和OS X上会相对容易。在Linux上会更难,“本机”对话框可能是Qt对话框、KDE对话框或Gnome对话框。实际上,我只需要在Windows和OS X上使用它,那么,也许这个选项是一个可能的解决方案。