如何在 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
.
中使用
我在 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
.