0

我必须使用 QTest、Qt、C++ 自动化测试:我在选项卡(tabwidget 的一部分)中写入文本,然后尝试关闭它,然后出现 QFileDialog(因为我对选项卡中的纯文本进行了更改),我尝试像这样“捕捉” QFileDialog:

    QWidgetList topWidgets = QApplication::topLevelWidgets();
    foreach (QWidget *w, topWidgets) {
        if (QFileDialog *fd = qobject_cast<QFileDialog *>(w)) {
            fd->setFileMode(QFileDialog::ExistingFiles);
            fd->selectFile("/tmp/test.txt");

        }
    }

获得 QFileDialog 对象后,我希望将选项卡中的更改保存在我之前在 tmp 目录中创建的文件“test.txt”中。当我执行这个没有任何反应时,QFileDialog 弹出,但 test.txt 没有被选中也没有保存,我该如何实现呢?

4

2 回答 2

2

如果文件对话框可见并且焦点设置为行编辑小部件,则 selectFile 方法不起作用。从 qfiledialog.cpp (QT 5.2):

if (!isVisible() || !d->lineEdit()->hasFocus())
    d->lineEdit()->setText(file);

对于我们的自动化测试,我们只是暂时隐藏文件对话框,调用 selectFile() 并再次显示它

于 2014-11-14T11:52:07.983 回答
1

尝试这个:

QWidgetList topWidgets = QApplication::topLevelWidgets();
foreach (QWidget *w, topWidgets) {
    if (QFileDialog *fd = qobject_cast<QFileDialog *>(w)) {
        fd->hide();
        fd->selectFile("/tmp/test.txt");
        fd->show();
        fd->exec();
    }
}
于 2015-10-20T09:14:16.387 回答