如何在 Qt5 中获取系统 QFileDialog?

How do I get the system QFileDialog in Qt5?

我在 Qt 应用程序中为 select 文件创建了文件对话框。迁移到 Qt5 时我遇到了回归,当链接到 Qt5 而不是 Qt4 时,文件对话框要差得多:

Qt4

Qt5

例如,用户很难导航到网络安装的共享目录。

代码就这么简单:

QString path;
path = QFileDialog::getExistingDirectory(this, tr("Pick a file"));

QFileDialog::DontUseNativeDialog 没有任何改变。

我的 OS 是 Ubuntu 16.04,我同时安装了 nautilus (3.14.3) 和 nemo (2.8.7)。 nemo 被配置为默认文件管理器:

xdg-mime default nemo.desktop inode/directory application/x-gnome-saved-search

所有其他应用程序似乎都使用与 Qt4 文件对话框屏幕截图相同的对话框。

如何在 Qt5 中获取 "old" 文件对话框?


如果我尝试 QT_QPA_PLATFORMTHEME= ./my_app 然后我得到这个:

以下在 Ubuntu 16.04 上对我有用——不过,它更像是一种变通方法,而不是实际的解决方案:

编辑: 首先确保安装了软件包 libqt5libqgtk2。它为 Qt5 带来了 GTK2 绑定。如果未安装软件包,文件选择器将类似于上述问题中显示的最后一个屏幕截图。

然后,假设您想从终端启动您的应用程序 my_app,请按如下方式启动它(注意 = 之后的 space):

$ QT_QPA_PLATFORMTHEME= my_app

这是因为,根据 bug report on launchpad,Ubuntu 包 appmenu-qt5 似乎有问题:该包强制 Qt5 对话框成为非本机的通过 /etc/profile.d/appmenu-qt5.sh 显式设置 QT_QPA_PLATFORMTHEME=appmenu-qt5 的副作用。在启动您的应用程序之前通过 QT_QPA_PLATFORMTHEME= 取消设置平台主题会在本地更改此行为。

编辑: 但是,使用上述方法时,全局菜单可能无法在 my_app.

中使用