Я должен автоматизировать тест с использованием 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 не выбирается и не сохраняется, как я могу добиться этого?
Метод 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();
}
}