在Windows下,Qt应用程序的外观和感觉是否与本地应用程序相同?

27
我即将把我的一款Mac应用程序移植到Windows上。该应用程序使用苹果的本地Cocoa/Appkit框架作为用户界面(UI)。UI是Obj-C代码,核心应用程序功能是可移植的C++代码。
现在我正在寻找一种方法将应用程序移植到Windows,并使其看起来和感觉像对Windows用户本地化的应用程序。我的选择是微软的MFC和Qt框架。虽然我确定MFC应用程序具有本地外观和体验,但我记得MFC编码本身很糟糕。我看了一下Qt并从开发人员的角度喜欢它。
但是,由于我不是Windows用户,我不知道Qt应用程序是否具有本地的Windows外观和体验。
因此我的问题是:我能否(不需要很多工作)使Qt应用程序表现和外观像使用本地Windows框架编写的应用程序?
5个回答

26

您可以轻松更改Qt应用程序的样式。在Windows和Mac上,默认样式实际上使用本机功能绘制窗口、控件等。

此外,Qt采取许多措施,即使是应用程序中最微小的方面(您甚至不会考虑到的事情),也会模拟特定平台的本机行为。因此,当移植时,您的Qt应用程序也可以替换当前的Mac应用程序。

我强烈建议您不要使用MFC,否则您将会后悔(尤其是如果您从未使用过本地Win32 API)。与Qt相比,它完全缺乏灵活性且难以使用。


6
如果您检查Qt的源代码,您会发现这些陈述是误导性的。Qt重新实现了Windows的外观和感觉。如果它调用了本地GUI函数,例如在Linux上,这些样式将无法工作。更准确地说,它使用本地光栅图形函数。 - user1095108
2
@user1095108 我想你在考虑Qt的“Windows 95”主题?那个确实是模拟。但本地主题实际上不会在Linux或其他任何除Windows之外的地方工作。 - Nikos C.
我的意思是 QWindowsStyle,它是 QWindowsXPStyleQWindowsVistaStyle 的基础,不知道它是 '95。怎么说“主题”?它是一种风格。 - user1095108
6
例如,在 Mac 上使用 Objective C + Cocoa/Swift 设计的应用程序中,滚动条会出现反弹效果。也就是说,如果您以高速度撞到滚动区域的顶部或底部,您会看到滚动条和区域反弹一段距离后才会回到原位。但在 Mac 上,使用 Qt 设计的应用程序则不具备这种行为。 - SexyBeast
+1 建议远离 MFC。除非你的程序已经使用 MFC 编写,否则最好不要使用。 - hetepeperfan
user1095108 是正确的。Qt 绘制自己的小部件。 https://dev59.com/koHba4cB1Zd3GeqPOj-w 但是已经有一些进展来包含原生控件。https://www.qt.io/blog/2017/02/06/native-look-feel - Kevin Muhuri

12

如您所见 doc.qt.io

Qt Widgets 是传统的用户界面元素,通常在桌面环境中使用。 这些小部件可以良好地集成到底层平台,并在 Windows、Linux 和 Mac OSX 上提供本地外观和体验。

查看 Qt Widget Gallery:

Qt 对小部件样式和主题的支持使您的应用程序能够适应本机桌面环境。

您可能会对名为How to Make Your Qt Application Look Native 的演示文稿感兴趣:

Qt 在每个受支持平台上使用本机样式 API,但是还有一些额外的技巧可供使用,确保您基于 Qt 的应用程序外观、体验和行为更佳。本演示将通过示例、提示和技巧来帮助您在所有平台上使您的应用程序表现出色。


5

不,它们并不是。虽然相似,但控件看起来不是本地的。人们的意思是,它使用Win32 API来呈现控件,类似于Windows呈现本地控件的方式,因此性能应该是可比较的。

只有像.NET Windows Forms这样的Windows特定框架才使用实际的本机Win32控件来创建常见的UI元素。


2
不仅仅是 Windows 特定的框架使用本地 API。还有一些跨平台的框架,例如 wxWidgets 也是如此。 - matthias krull

5

它们看起来有点丑,但感觉上不是很糟。

特别是如果你设计应用程序时考虑了Windows(就像使用Cocoa一样)。我还没有见过类似于“带鱼缝”的界面(商业第三方克隆除外)或以组合图标视图形式存在的MFC蓝/黑色样式或列表视图。

不幸的是,WxWidgets编程也非常丑陋。肯定比MFC好一些。如果你想要一个真正原生的应用程序,只剩下两个选择:如果你需要快速和小巧,那么使用MFC;如果你不关心速度,则可以使用.NET。

之前的一家公司在MFC上面有50000行代码,这是必要的,以便能够更加舒适地编程这个1992年的框架。不幸的是,我现在还不知道市场上是否有类似的东西可用。

问题是你的客户是否真的重视原生外观,使其成为销售因素。我现在使用QT,因为它足够好。


另一个需要考虑的问题是,对于某些应用程序,同一用户可能会在不同的操作系统上同时使用它,并且可能希望应用程序的外观和感觉在各个平台上保持一致。 - hyde
2
这是关于Qt的内容,不是QT(Quick Time)。 - Mariusz Jaskółka
1
什么是QuickTime? :D - dani
有第三个选择:WTL。它比MFC更加优雅。 - Marc.2377

3

你应该查看样式参考。是的,这是可能的,而且根本不需要很多工作。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接