如何在Qt5中获得系统QFileDialog?

时间:2016-11-29 10:37:28

标签: qt ubuntu qt5 ubuntu-16.04 qfiledialog

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

的Qt4

Qt4 file dialog

QT5

Qt5 file dialog

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

代码就像这样简单:

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

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

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

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

如果我尝试使用QT_QPA_PLATFORMTHEME= ./my_app,那么我就明白了:

enter image description here

1 个答案:

答案 0 :(得分:4)

以下在Ubuntu 16.04上对我有用 - 但它更像是一种解决方法而不是实际解决方案:

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

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

$ QT_QPA_PLATFORMTHEME= my_app

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

修改:但是,使用所述方法时,全局菜单可能无法在QT_QPA_PLATFORMTHEME=中使用。