簡體   English   中英

選擇一個文件夾后QFileDialog :: getExistingDirectory沒有關閉

[英]QFileDialog::getExistingDirectory does not close after choosing a folder

在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位操作系統。 從存儲庫中使用Qt庫。

我的最終目的只是顯示一個文件夾選擇器對話框,選擇文件夾后,該對話框應關閉。 之后,處理應繼續。 這個怎么做?

提前致謝。

即使QFileDialog::getExistingDirectory是靜態的,並且不需要QFileDialog對象才能工作,當最終選擇目錄時,它也應該關閉對話框窗口。 默認情況下,該函數嘗試打開本機文件對話框窗口,這在某些平台上似乎會引起一些問題。

您應該嘗試通過添加選項DontUseNativeDialog強制使用非本機對話框:

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

並刪除其他兩行(使用new QFileDialogif(dlg->close()) ... )。

getExistingDirectory(...)是靜態函數。

要添加到cmannett85的答案:

您不應該創建QDialog的實例。 如果這樣做,則由您自行隱藏。 修改代碼以讀取

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

此代碼應相對可移植。 qgetenv("HOME")是特定於Unix的。 您不應該在基於Qt的項目中引入特定於平台的免費代碼-這樣做有悖於首先使用Qt的目的。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM