我目前正在将我的一个应用程序移植到使用 QT 作为 GUI 的 C++。QML 样本看起来相当不错,但用户界面控件看起来不像 Windows 和 MacOS 上的正常控件。
我想使用 QML 提供的许多很酷的功能(如动画),但也有看起来与普通控件相似的控件(好像我会使用标准 QT)。
我可以在某处找到一些样式化的 QML 控件,或者您会推荐哪种方法。
我目前正在将我的一个应用程序移植到使用 QT 作为 GUI 的 C++。QML 样本看起来相当不错,但用户界面控件看起来不像 Windows 和 MacOS 上的正常控件。
我想使用 QML 提供的许多很酷的功能(如动画),但也有看起来与普通控件相似的控件(好像我会使用标准 QT)。
我可以在某处找到一些样式化的 QML 控件,或者您会推荐哪种方法。
对冲,您的 UI 看起来不是原生的有两个原因:
1) Qt Quick (QML) 现在处于只有基本原语可用的阶段。这意味着还没有可用的实际 UI 元素(如按钮、工具栏等)。其中只有一些,例如列表视图,它们包含在基本组件集中。Qt 人员正在进行一些工作,您可以在此处找到一些可用的桌面组件:
http://qt.gitorious.org/qt-components/desktop
这些将在您的桌面上看起来很原生,但此时它们处于非常早期且不稳定的阶段。
2) Qt Quick (QML) 由诺基亚拥有的一家名为 Qt Development Frameworks(前 Trolltech)的公司开发,而诺基亚又是世界上最大的手机制造商之一。Qt Quick 是为移动和嵌入式平台上的触摸用户界面而创建的,最初是针对 MeeGo 平台的。MeeGo 的一组 QML 组件正在开发中,但根据 Qt Development Frameworks 博客,由于营销原因,公众无法使用。向公众提供的版本并没有过时,但您可以了解正在发生的事情。它在这里可用:
http://qt.gitorious.org/qt-components
如果您的应用程序是为桌面开发的,我建议将 C++/Qt 用于桌面框架,这将为您的应用程序提供本机外观。尽管 Qt Development Frameworks 最近表示他们的主要战略是 Qt Quick,同时将商业许可和支持传递给一家名为 Digia 的公司。因此,考虑是否值得使用 Qt 的桌面版本也许是有意义的。
希望有帮助
您可以嵌入 QWidgets 并从 QML 中使用它们。它需要一点 C++,不如纯 QML 小部件好用,但它工作得很好,让您可以访问许多现有的 Qt 功能。
您可以使用QGraphicsWidget作为解释(简要)here。或者,您可以执行相反的操作:在 Qt GUI 中嵌入 QML 接口,使用QDeclarativeView ,如此处所述。
丹,这是一种方法,但是:我会说这是一种“只做”的方法,而不考虑它的对错。此外,我并不是说您的解决方案是错误的,我只是想解释为什么我认为不应该以这种方式实现应用程序。
首先,正如我所提到的,Qt Quick 就像它的名字一样,旨在快速创建用户界面。尝试在图形场景中嵌入 Qt 桌面小部件将产生额外的工作(可能相当大 - 取决于任务)将 API 导出到 QML 环境并使一切正常工作。QML 应用程序的架构与桌面非常不同。例如,如果您使用模型视图控制器,将 QTreeView 和 QItemDelegate 导出到 QML 并使其工作可能会变成一个非常复杂的解决方案。事实上,如果遵循这个概念,最简单的方法是在 C++ 后端创建所有 UI 并将最终解决方案导出到 QML 但实际上是一个完全没有利用 QML 优势的桌面实现。如果以这种方式实现,那么使用 Qt Animation API 会更容易,它可以提供与 QML 相同的“流体”效果,但只使用纯粹的 QGraphicsView。
其次,如果您想在 QGraphicsView 中使用现有的桌面小部件,则必须将它们嵌入为“代理小部件”,据从事 Qt Quick 和 QML 工作的诺基亚人员称,这在性能方面存在很大问题。
第三,如果您想使用 QGraphicsWidget 方法,它将引导您从头开始实现所有小部件,因为在 Qt 中没有基于 QGraphicsWidget 的小部件。即使对于像 Push Button 小部件这样简单的东西,您也需要自己编写所有代码。
第四,正如诺基亚之前所说,他们将 Qt 桌面支持移交给了第三方公司,并解释说他们将所有精力都集中在 Qt Quick 上。所以我会考虑你的应用程序的可维护性。加上即将推出的 QML 场景图,所有 QML API 都将在该实现上移动,我不确定是否仍然可以使用桌面小部件。