2

Qtでは、

QFileDialog *dlg = new QFileDialog(); 
QDir dir = dlg->getExistingDirectory(this, tr("Choose folder"), qgetenv("HOME"));

フォルダー選択ダイアログを開きます。フォルダーを選択すると (選択ボタンを押します)、フォルダーが自動的に閉じません。だから私は試しました:

if(dlg->close() == true) delete(dlg);

dlg->close() をデバッグすると true が返され、コード delete(dlg) がヒットします。それでも、フォルダ選択ダイアログ ボックスは閉じません。

Ubuntu 11.10 64 ビット OS を使用しています。リポジトリからの Qt ライブラリの使用。

私の最終的な目的は、フォルダー選択ダイアログを表示することだけであり、フォルダーが選択されると、ダイアログが閉じます。その後、処理を続行する必要があります。これを行う方法?

前もって感謝します。

4

3 に答える 3

7

QFileDialog::getExistingDirectory静的で動作するオブジェクトを必要としない場合でもQFileDialog、ディレクトリが最終的に選択されたときにダイアログ ウィンドウを閉じる必要があります。デフォルトでは、この関数はネイティブ ファイル ダイアログ ウィンドウを開こうとしますが、これは一部のプラットフォームで問題を引き起こすようです。

オプションを追加して、非ネイティブ ダイアログを強制する必要がありますDontUseNativeDialog

QString dir = QFileDialog::getExistingDirectory(
    this, 
    tr("Choose folder"),
    QDesktopServices::storageLocation(QDesktopServices::HomeLocation),
    QFileDialog::ShowDirsOnly | QFileDialog::DontUseNativeDialog);

new QFileDialogそして、他の 2 行 (と)を削除しif(dlg->close()) ...ます。

于 2012-07-02T00:04:15.610 に答える
1

getExistingDirectory(...)静的関数です。

于 2012-07-01T20:20:05.307 に答える
0

cmannett85 の回答に追加するには:

のインスタンスを作成しないでくださいQDialog。もしそうなら、それを隠すのはあなた次第です。コードを変更して読む

const QString home = QDesktopServices::storageLocation(QDesktopServices::HomeLocation);
const QDir dir = QFileDialog:getExistingDirectory(this, tr("Choose folder"), home);

このコードは比較的移植性が高いはずです。qgetenv("HOME")Unix 固有です。Qt ベースのプロジェクトにプラットフォーム固有の無償のコードを導入するべきではありません。そもそも Qt を使用する目的に反することになります。

于 2016-08-10T20:58:20.367 に答える