Я использую Qt 5.12 и пытаюсь написать тест (используя QTest) для открытия проекта, хранящегося в каком-то формате xml.
В тесте я использую QTimer::singleShot
, чтобы дождаться появления QFileDialog
, как предложено в QT закрывает окно с помощью QTest в заблокированном потоке .
Проблема в том, что QFileDialog::selectFile
ничего не выбирает. Это означает, что кнопка OK не активна, поэтомуЯ не могу щелкнуть по нему в моем тесте.
В следующем примере я предполагаю, что полный путь к файлу /tmp/project.xml
.Обратите внимание, что QFileDialog::setDirectory
прекрасно работает: когда начинается следующий пример, вы находитесь в /tmp
dir вместо /
.
#include <QApplication>
#include <QFileDialog>
#include <QTimer>
int main(int argc, char *argv[])
{
QApplication a(argc, argv);
QTimer::singleShot(300, []() {
QWidget* window = nullptr;
while (!window) {
window = qApp->activeModalWidget();
}
QFileDialog* fd = qobject_cast<QFileDialog*>(window);
fd->setDirectory("/tmp");
fd->selectFile("project.xml");
});
QString path = QFileDialog::getOpenFileName(nullptr, "Open Project",
"/", QString(),
nullptr, QFileDialog::DontUseNativeDialog);
}