QFileDialog::getExistingDirectory()
ist eine statische Funktion, das bedeutet, es nicht auf die Instanz aufgerufen wird dialog
wie Ihr Code macht es den Anschein. Dies bedeutet auch, dass die Funktionen, die Sie in Ihrer dialog
-Instanz aufgerufen haben, keine Auswirkung haben.
Die Dokumentation besagt "getExistingDirectory()
ist eine Komfortfunktion ..." Sie können also den gleichen Effekt erhalten, indem Sie eine Instanz von QFileDialog
verwenden. Der Quellcode von getExistingDirectory()
sieht mehr oder weniger wie dies
QFileDialogArgs args;
args.parent = parent;
args.caption = caption;
args.directory = QFileDialogPrivate::workingDirectory(dir);
args.mode = (options & ShowDirsOnly ? DirectoryOnly : Directory);
args.options = options;
// create a qt dialog
QFileDialog dialog(args);
if (dialog.exec() == QDialog::Accepted) {
return dialog.selectedFiles().value(0);
}
return QString();
Also muss man etwas tun ähnlich und Ihre Einstellung von WindowFlags
hinzuzufügen. Es könnte wie folgt aussehen (getestet haben es nicht):
QFileDialog dialog(parent, caption, directory, filter);
dialog.setFileMode(DirectoryOnly);
dialog.setWindowModality(Qt::ApplicationModal);
dialog.setModal(true);
dialog.setWindowFlags(Qt::WindowStaysonTopHint);
if (dialog.exec() == QDialog::Accepted) {
return dialog.selectedFiles().value(0);
}
return QString();
Können Sie mir mitteilen, die Datei für QFileDialogArgs umfassen, wie ich einen Fehler unvollständigen Typ bekommen ist nicht erlaubt? Ich habe versucht qfiledialog_p.h aber es heißt, dass es nicht gefunden wird. – Veera
Dieser Teil des Codes scheint für Qt privat zu sein (daher das Suffix _p.h), aber Sie sollten den gleichen Effekt erhalten, wenn Sie den anderen Konstruktor verwenden. Ich werde die Antwort aktualisieren. –
das wäre toll! – Veera