![](/img/trans.png)
[英]How to specify the QFileDialog::getExistingDirectory() method?
[英]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 QFileDialog
和if(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.