Автоматическое сохранение файла с 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 не выбирается и не сохраняется, как я могу добиться этого?

0

Решение

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

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

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

2

Другие решения

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

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();
}
}
1

По вопросам рекламы [email protected]