何时使用Qt Quick 2中的哪些类以及如何使用



我正在尝试用Qt 5.1和Qt Quick 2编写一款游戏,它是新的(更快的)图形引擎。我已经阅读了几个小时的文档,但仍然不知道如果我想在屏幕上移动由C++代码决定位置的项目,应该使用什么类。

在QGraphics中,这很容易:我创建了一个QGraphicsScene的实例,将QGraphicsItem的任何继承者添加到其中,然后创建一个QGraphicsView的实例,它是一个Widget,显示所有项目及其更改。我将QGraphicsItem连接到信号以进行更改。

在Qt Quick 2中,我首先阅读了

  • 仅使用QML和Javascript的官方示例
  • 然后我想我找到了QGraphics的等价物,即QDeclarativeEngine、QDeclarative Component和QDelcaractiveView,并准备使用Q_PROPERTY
    • UPDATE创建自定义QML元素:刚才我发现QDeclarative*是Qt Quick 1,QQml*是等价的Qt Quick 2前缀
  • 但后来我也找到了QQuickItem、QQuickWindow、QSGNode等。
  • 在阅读了许多教程文档后,我仍然不知道"默认"解决方案是什么。每个教程都显示了不同的东西。我被所有的例子和课程淹没了。
    • 有人能给我一个基于Qt Quick 2的基本例子吗?在这个例子中,画布上的图像被用C++编写的常规QObject发送的信号移动
    • 你能帮我把我提到的所有课程分类吗。我什么时候用哪个

我认为你在不同层面上混淆了事情,这敏锐地使这个问题成为一个"复合"问题,应该分成更小的问题。。。

无论如何:

  • 当您需要能够承载QtQuick 2内容的QWindow时,则需要QQuickViewQQuickWindow(通常前者提供了更多便利;请参阅他们的文档)
  • QtQuick2不是基于QGraphicsView。它甚至不在QtWidgets中——您不能在那里使用任何与小部件相关的类或API
  • 将QML元素属性绑定到C++对象的最简单方法就是将该对象暴露给QML引擎,然后执行普通绑定

例如:

class MyObject : public QObject {
    Q_OBJECT
    Q_PROPERTY(int horizontalPos READ horizontalPos NOTIFY horizontalPosChanged)
public:
    int horizontalPos() const { return m_horizontalPos; }
signals:
    void horizontalPosChanged();
    // etc.
}

然后,您可以向QML引擎公开MyObject的实例:

MyObject obj;
QQuickView view;
// exposes the object under the "_myObject" name
view.engine()->context()->setContextProperty("_myObject", &obj); 

下划线很好地强调了这个名字来自C++世界的事实。

最后,在QML中,您可以直接绑定到属性:

Rectangle {
    x: _myObject.horizontalPos // voilà, they're bound together
}

您可以从c++端动态实例化自定义qml组件并修改属性,仍然是从c++端。

你也可以只处理一些C++列表/模型/多个qobject,其中包含你在屏幕上显示的精灵/字符/任何东西的位置,然后将这个列表与你的qml端绑定。

你也可以从C++中编写一些QQuickItem来布局它的子项(就像这里提出的:http://qt-project.org/forums/viewthread/29407/)

-

这里有一些链接完成了peppe的答案/详细介绍了如何混合QtQuick2&C++:

Qt Quick 2/C++集成的文档页面(Qt5文档没有被谷歌很好地索引):

  • http://qt-project.org/doc/qt-5.0/qtqml/qtqml-cppintegration-topic.html
  • http://qt-project.org/doc/qt-5.0/qtqml/qtqml-cppintegration-interactqmlfromcpp.html

解释QWidget::createWindowContainer的博客文章(只有当你想将QtQuick2嵌入到QtWidget应用程序中时……否则,你可以使用QtCreator的QtQuick 2应用程序的骨架):

  • http://blog.qt.digia.com/blog/2013/02/19/introducing-qwidgetcreatewindowcontainer/?utm_source=rss&utm_medial=rss&utm_campaign=引入qwidgetcreatewindowcontainer

相关内容

  • 没有找到相关文章

最新更新