如何使用 Windows 风格在 Linux 中编译 Qt 应用程序?

Posted

技术标签:

【中文标题】如何使用 Windows 风格在 Linux 中编译 Qt 应用程序?【英文标题】:How can I compile Qt app in Linux using Windows style? 【发布时间】:2015-05-01 14:47:26 【问题描述】:

我正在开发一个 Qt Widgets 应用程序,由于编译性能问题,我开始在 Linux Ubuntu 而不是 Windows 中开发它。问题是,在编译和运行时,应用程序以传统的 Ubuntu 样式显示,而不是 Windows (7) 样式。由于该应用程序仅适用于 Windows,我想知道如何在 Linux Ubuntu 中编译它,但使其以 Windows 样式显示。

我尝试在 main.cpp 中使用QApplication::setStyle(QStyleFactory::create("QWindowsStyle"));,但没有成功。我猜 QtAssistant 文档对如何进行此更改还不够清楚。任何帮助将不胜感激。

【问题讨论】:

【参考方案1】:

您是否有机会使用没有该样式编译的 Qt 包?您可以尝试运行QStyleFactory::keys() 来验证样式是否存在?

【讨论】:

感谢您的回复。运行上述功能,我得到了 3 个选项,其中之一是“Windows”。不幸的是,在使用了那个之后,我得到了一个奇怪的、类似于 Windows 98 的外观,这绝对不是我想要的:) 所以 Qt for Linux(我使用的是最后一个版本)可能没有 Windows 7 风格。你知道我该如何解决这种情况吗? @Momergil 我不是 Linux 包配置方面的专家,但一种选择肯定是从源代码重新编译 Qt。 样式通常依赖于其相关平台上的本机代码,因此您可能无法拥有 Windows 样式,除非在 Windows 上。例如,除了 OS X,你绝对不能在任何东西上使用 Mac OS X 风格。【参考方案2】:

不能这样做,因为样式的元素是由 Windows(或 OS X)而不是 Qt 呈现的。 Qt 的风格实现要求操作系统库提供这些元素的位图。如果您愿意,您可以修改样式以将磁盘缓存用于静态项目。然后,您可以在所有平台上使用该样式。问题是这些操作系统提供的位图是操作系统的一部分,因此不可再分发。

在 Qt 3 时代,至少曾经无处不在的唯一特定于 plastform 的样式是旧的 Windows 95 样式。我不确定它的当前状态是什么。

【讨论】:

【参考方案3】:

QStyleFactory::keys()的第一次签出

然后通过调用设置外观

qApp->setStyle("Windows");

这个命令会给你 Windows 98 的外观。如果您想要 windows vista 外观,您应该使用 -style-windowsvista 配置 qt 源并重建所有源。


更新

根据http://doc.qt.io/qt-5/qstylefactory.html#details qt 风格不是独立于平台的。因此,在非 Windows 平台上拥有原生外观是不可能的。值得一提的是,在 Windows 中还需要 Windows SDK 本身才能构建 Qt 的源代码,否则您的应用程序将看起来像 Windows 7 中的 Windows 98。

【讨论】:

感谢您的回复。当我在 Windows 和 Linux 中安装 Qt 时,我从来不需要“配置”任何东西。我只是下载安装程序,选择所需的包并安装它。似乎“配置 qt 源”不适用于这种情况,对吗?那么,如果我想通过建议的修改“重建所有源”,您能否提供一个链接或解释,说明我该怎么做? @Momergil 安装 Qt 时,有一个选项可以安装所有源代码。您可以在目录中找到它们: QTDIR/QT_VERSION/Src/ 。在此目录中,您将找到配置文件和 qt.pro。然后使用 doc.qt.io/qt-4.8/configure-options.html 配置源。只需在该页面内搜索-qt-style-<style>。用于构建使用此链接doc.qt.io/qt-5/build-sources.html

以上是关于如何使用 Windows 风格在 Linux 中编译 Qt 应用程序?的主要内容,如果未能解决你的问题,请参考以下文章

三菱plc中编好的指令如何删除

如何使 WPF 应用程序在 Windows 经典风格和 Windows XP 风格中都一样?

使用命令行在 Visual Studio 中编译为发行版

如何使用 QProcess 运行 vim 终端

linux内核开发程序风格

如何在 Windows 上复制 iTunes 风格的窗口?