Автоматическое сохранение файла с QFileDialog

Я должен автоматизировать тест с использованием 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 я хочу, чтобы мои изменения на вкладке были сохранены в файле "test.txt", который я создал ранее в каталоге tmp. Когда я выполняю это, ничего не происходит, выскакивает QFileDialog, но test.txt не выбирается и не сохраняется, как я могу этого добиться?

2 ответа

Решение

Метод selectFile не работает, если файл диалога виден и если фокус установлен на виджет редактирования строки. Из qfiledialog.cpp (QT 5.2):

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

Для наших автоматических тестов мы просто на мгновение скрываем диалог файла, вызываем selectFile() и показываем его снова

Попробуй это:

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();
    }
}
Другие вопросы по тегам