2017-09-27 3 views
1

Ich habe mehrere Dialoge mit Fenster Flags als WindowStaysonTopHint. Wenn ich QFileDialog öffne, wird es am unteren Rand dieser Dialoge angezeigt. Wie setze ich ein Fenster Flag für QFileDialog. Ich verwende den folgenden Code, um den Dialog oben anzuzeigen, aber es funktioniert nicht.QFile-Dialog wird nicht auf der Oberseite angezeigt

> QFileDialog *dialog=new QFileDialog(this); 
> 
> dialog->setWindowModality(Qt::ApplicationModal); 
> 
> dialog->setModal(true); 
> dialog->setWindowFlags(Qt::WindowStaysonTopHint); 
> dialog->getExisitngDirectory(this,tr("Directory"),"\home",QFileDialog::ShowDirsOnly); 

Antwort

2

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(); 
+0

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

+0

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. –

+0

das wäre toll! – Veera

Verwandte Themen