如何在Qt5中获得系统QFileDialog?

Vic*_*ine 5 ubuntu qt qfiledialog qt5 ubuntu-16.04

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

Qt4的

Qt4文件对话框

QT5

Qt5文件对话框

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

代码就像这样简单:

QString path;
path = QFileDialog::getExistingDirectory(this, tr("Pick a file"));
Run Code Online (Sandbox Code Playgroud)

QFileDialog::DontUseNativeDialog 什么都不改变.

我的操作系统是Ubuntu 16.04,我安装了nautilus(3.14.3)和nemo(2.8.7).nemo配置为默认文件管理器:

xdg-mime default nemo.desktop inode/directory application/x-gnome-saved-search
Run Code Online (Sandbox Code Playgroud)

每个其他应用程序似乎使用与Qt4文件对话框屏幕截图相同的对话框.

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


如果我尝试,QT_QPA_PLATFORMTHEME= ./my_app那么我得到这个:

在此输入图像描述

sim*_*mon 4

以下内容适用于 Ubuntu 16.04 \xe2\x80\x93 ,但它更多的是一种解决方法,而不是实际的解决方案:

\n\n

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

\n\n

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

\n\n
$ QT_QPA_PLATFORMTHEME= my_app\n
Run Code Online (Sandbox Code Playgroud)\n\n

这是因为,根据launchpad 上的错误报告,Ubuntu 软件包似乎存在问题:该软件包强制 Qt5 对话框变为非本机对话框,这是通过appmenu-qt5显式设置的副作用。在启动应用程序之前取消设置平台主题会在本地更改此行为。QT_QPA_PLATFORMTHEME=appmenu-qt5/etc/profile.d/appmenu-qt5.shQT_QPA_PLATFORMTHEME=

\n\n

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

\n