我正在尝试用Qt 5.1和Qt Quick 2编写游戏,它是新的(更快的)图形引擎.我已经阅读了几个小时的文档,但如果我想在屏幕上移动其位置由C++代码确定的项目,我仍然无法弄清楚要使用哪些类.
在QGraphics中很简单:我创建了一个QGraphicsScene实例,将QGraphicsItem的任何继承者添加到它,然后创建一个QGraphicsView实例,它是一个Widget并显示所有项目及其更改.我将QGraphicsItem连接到信号以进行更改.
在Qt Quick 2中我首先阅读了
我认为你对不同层面的事情感到困惑,这使得这个问题成为一个"复合"问题,应该在较小的问题中分开......
无论如何:
QWindow能够托管QtQuick 2内容的东西时,你需要一个QQuickView或一个QQuickWindow(通常是前者,提供更多便利;请参阅他们的文档).QGraphicsView基于.它甚至不在QtWidgets中 - 你不能在那里使用任何与小部件相关的类或API.例如:
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.
}
Run Code Online (Sandbox Code Playgroud)
然后,您可以将MyObject的实例公开给QML引擎:
MyObject obj;
QQuickView view;
// exposes the object under the "_myObject" name
view.engine()->context()->setContextProperty("_myObject", &obj);
Run Code Online (Sandbox Code Playgroud)
下划线是一个很好的触摸,强调这个名称来自C++世界的事实.
最后,在QML中,您可以绑定到该属性:
Rectangle {
x: _myObject.horizontalPos // voilà, they're bound together
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
1746 次 |
| 最近记录: |