【问题标题】:How do I get the system QFileDialog in Qt5?如何在 Qt5 中获取系统 QFileDialog?
【发布时间】:2016-11-29 10:37:28
【问题描述】:

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

Qt4

Qt5

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

代码就这么简单:

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,那么我会得到:

【问题讨论】:

  • 不知何故,平台集成在 Qt 5 中不起作用。DontUseNativeDialog 选项不正确:Qt 4 似乎确实使用了本机对话框。也许 Qt 5 没有使用正确的平台集成插件构建,或者这样的集成插件还不存在。
  • 或者,t 看起来您使用的是不支持 Gnome (GTK?) 文件对话框的 Qt 版本...
  • 我正在使用来自 Ubuntu 存储库的 Qt5 二进制文件

标签: qt ubuntu qt5 ubuntu-16.04 qfiledialog


【解决方案1】:

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

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

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

$ QT_QPA_PLATFORMTHEME= my_app

这是因为,根据bug report on launchpad 的说法,Ubuntu 软件包 appmenu-qt5 似乎存在问题:软件包强制 Qt5 对话框变为非本地对话框,这是通过 @ 显式设置 QT_QPA_PLATFORMTHEME=appmenu-qt5 的副作用987654328@。在启动应用程序之前通过QT_QPA_PLATFORMTHEME= 取消设置平台主题会在本地更改此行为。

编辑:但是,当使用所描述的方法时,全局菜单可能在 my_app 中不起作用。

【讨论】:

  • 这并没有提供解决方案(对我来说看起来更糟),但更准确地描述了问题!
  • @VictorLamoine 同意我的建议不是一个实际的解决方案。我想这只能通过修复包appmenu-qt5 来提供。无论如何,我希望它对您有所帮助。 “我看起来更糟”是什么意思?你试过了吗?
  • 哦,我明白了。我忘了说:你已经安装了 Qt5 GTK2 平台主题吗?它是包libqt5libqgtk2。两者的结合为我做到了。如果它也适合你,我会分别更新我的答案。
  • 现在,这是一个解决方案!非常感谢。全局菜单适合我
  • 太棒了!很高兴我能帮上忙。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-03-12
  • 2011-06-02
  • 2012-04-18
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多