【问题标题】:Normal (desktop) user-interface controls with QML?使用 QML 的普通(桌面)用户界面控件?
【发布时间】:2011-08-01 11:22:10
【问题描述】:

我目前正在将我的一个应用程序移植到使用 QT 作为 GUI 的 C++。 QML 样本看起来相当不错,但用户界面控件看起来不像 Windows 和 MacOS 上的普通控件。

我想使用 QML 提供的许多很酷的功能(如动画),但也有与普通控件相似的控件(就像我使用标准 QT 一样)。

我能在某处找到一些风格化的 QML 控件吗?或者您会推荐哪种方法。

【问题讨论】:

标签: c++ qt user-interface qml


【解决方案1】:

对冲,您的 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 的桌面版本也许是有意义的。

希望有帮助

【讨论】:

    【解决方案2】:

    您可以嵌入 QWidgets 并从 QML 中使用它们。它需要一点 C++,不如纯 QML 小部件好用,但它工作得很好,让您可以访问许多现有的 Qt 功能。

    您可以使用QGraphicsWidget 解释(简要)here。或者,您可以反过来:在 Qt GUI 中嵌入 QML 接口,使用 QDeclarativeView 解释 here

    【讨论】:

      【解决方案3】:

      Dan,这是一种方法,但是:我会说这是一种“只做”的方法,而不考虑它的对错。此外,我并不是说您的解决方案是错误的,我只是想解释为什么我认为应用程序不应该以这种方式实现。

      首先,正如我所提到的,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 小部件这样简单的东西,您也需要自己编写所有代码。

      第四,as Nokia stated previously,他们将 Qt 桌面支持移交给了第 3 方公司,解释说他们将所有精力都集中在 Qt Quick 上。所以我会考虑你的应用程序的可维护性。再加上即将推出的 QML 场景图,所有 QML API 都将在该实现上移动,我不确定是否仍然可以使用桌面小部件。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2010-09-08
        • 1970-01-01
        • 2018-07-22
        • 2017-05-15
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多