Qt 设计师 C++ 或 QML 用于 GUI。

51

我知道在Qt中使用QML是相当新的,我想知道是否应该使用Qt Designer或QML来设计我的应用程序。我将使用MVC模式,如果我使用QML来设计GUI,则我主要担心它可能不容易集成到我的C++应用程序的其余部分中。

欢迎提供您的个人建议,我会非常感激。


这里有一篇关于如何在Visual Studio中使用CMake构建QML桌面组件的教程,教程包含一个带有完整启动代码的zip文件,可以直接使用。希望对您有所帮助。文章链接:http://sharedrealitynews.blogspot.com/2012/02/building-qml-desktop-components-with.html - user1249507
3个回答

47

QML主要用于移动平台。由于其年轻和对各种平台接口约定的关注,它缺乏像按钮和组合框之类的标准控件(但请参见Components项目)。如果您使用移动设备或您的UI需要高度定制的视觉样式,则可能值得考虑QML。但是您需要为设计自定义控件做大量额外工作。在我看来,集成QML和C ++仍然相当困难。个人建议仅在JavaScript上,仅在移动平台上使用QML创建简单应用程序。在适当的情况下,我可能会考虑使用C ++编写自定义QML元素。

Qt的C ++ API不会很快消失。 它也是为桌面设计的,并且将更好地满足用户对桌面平台的期望。 如果您在桌面上,请坚持使用C ++和Designer。 即使在QML成熟一些后,它也可能不是大多数桌面应用程序的正确解决方案。

更新!

看起来事情开始改变了。 我自己还没有尝试过这些新组件,文档似乎有点稀少(至少不太容易找到),但这可能最终消除了在桌面上使用QML的最大障碍。尚不清楚这是否会得到长期支持,但如果您愿意接受成为早期采用者的风险,我认为现在QML可能是桌面应用程序的可行选择。


10
我认为QML是WPF/XAML的跨平台版本(并且更易读!)。它没有任何特定于移动设备的限制。 - Dynite
1
@Steve:“那是目前最舒适的地方。”我认为这并没有事实支持。你复制粘贴的文本只是营销材料,用于展示它可以在任何地方使用。 - Dynite
@Dynite:这很公平,但你没有解决标准元素的触摸屏偏好问题。此外,组件项目似乎主要支持移动平台 - 我看不到任何模拟桌面 GUI 样式的等效支持。 - Steve S
你会比上一个链接更重视这个吗?:http://labs.qt.nokia.com/2010/09/10/building-the-future-reintroducing-the-qt-quick-components/ “基于QWidget的UI仍将是桌面应用程序的主要架构。” - Steve S
1
此回答可能需要进行编辑以反映在混合使用Qt C++ API和QML方面存在的困难(双向)。因此,对于桌面端,您可以从上层C++小部件开始,并在其中添加一些用QML设计的部分,以获得需要美观、花哨的效果。 - Korchkidu
显示剩余3条评论

15

建议尝试一下 QML,以测试它是否适合您的需求。

如果您正在构建具有动态界面和动画效果的高度自定义 UI,则 QML 是最佳选择;如果您正在构建传统的桌面应用程序,则可能需要坚持使用 Qt C++ API。

关于 QML 和 C++ 之间的集成,QML 被设计成易于与 C++ 代码集成,许多 QML 应用程序使用某种形式的 C++ 后端。将 C++ 对象注入到 QML 接口中或使用 C++ 编写自定义 QML 元素都很简单。请参阅http://doc.qt.io/archives/qt-4.7/qtbinding.htmlhttp://doc.qt.io/archives/qt-4.7/qml-extending-tutorial-index.html


13
上面的答案中忽略了一个问题,QML具有JavaScript编写业务逻辑的优缺点(如果需要)。我目前正在为桌面构建一个中小型应用程序,我的两个alpha用户很喜欢它。我对这个框架的表现力和快速测试感到印象深刻。总的来说,与RAD编辑器相比,我觉得使用它更快,而且在进行烦人的操作(如悬停/验证等)时,我很高兴在UI上使用JavaScript作为后备方案。
我认为这取决于您对语言的熟悉程度。如果C ++是您的首选语言,那么您可能会更喜欢设计师。如果您来自Web(承认,我是一位Java EE工程师/MVC .NET开发人员,做了很多前端工作),您会发现它令人耳目一新,并且非常快速。
它还允许一些用户期望的响应能力。总体而言,我会给它一个巨大的加分。试试吧,你可能会感到高兴,也可能会感到非常恼火。我仍然对某些事情很生气(特别是FileIO),但我一直在享受桌面上的GUI部分,这是我很少做到的。

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