首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >何时在QtQuick2中使用哪些类以及如何使用?

何时在QtQuick2中使用哪些类以及如何使用?
EN

Stack Overflow用户
提问于 2013-07-30 00:50:13
回答 1查看 1.8K关注 0票数 6

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

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

在QtQuick2中,我首先阅读了

  • official examples只使用QML和Javascript,
  • 然后我想我找到了与QGraphics对应的元素,即QDeclarativeEngine、QDeclarativeComponent和QDelcarativeView,并准备使用Q_PROPERTY创建自定义的QML元素。
    • UPDATE:刚才我发现QDeclarative*是QtQuick1,QQml*是等效的QtQuick2前缀。

在阅读了许多教程文档之后,我仍然不知道“默认”解决方案是什么。每个教程都显示了一些不同的东西。我被所有的例子和课程迷住了。

  • 有人能给我一个基于QtQuick2的基本例子吗?在哪里,画布上的图像被用QObjects编写的常规C++发送的信号移动?
  • 你能帮我把我提到的所有课程分类吗?我什么时候用?
EN

回答 1

Stack Overflow用户

发布于 2013-07-30 20:30:58

我认为你在不同的层次上混淆了事物,而这会使这个问题成为一个“复合”问题,应该在较小的问题中分裂.

总之:

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

例如:

代码语言:javascript
复制
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的一个实例:

代码语言:javascript
复制
MyObject obj;
QQuickView view;
// exposes the object under the "_myObject" name
view.engine()->context()->setContextProperty("_myObject", &obj); 

下划线是一个很好的方式来强调这个名字来自C++世界。

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

代码语言:javascript
复制
Rectangle {
    x: _myObject.horizontalPos // voilà, they're bound together
}
票数 6
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/17936624

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档