Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/laravel/11.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Qml 何时使用Qt Quick 2中的哪些类以及如何使用?_Qml_Qt5_Qtquick2 - Fatal编程技术网

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

Qml 何时使用Qt Quick 2中的哪些类以及如何使用?,qml,qt5,qtquick2,Qml,Qt5,Qtquick2,我正在尝试用Qt5.1和QtQuick2编写一个游戏,它是一个新的(更快的)图形引擎。我已经阅读了几个小时的文档,但是仍然无法确定如果我想在其位置由C++代码决定的屏幕上移动项目,我们将使用什么类。 在QGraphics中,这很简单:我创建了一个QGraphicscene实例,将QGraphicsSitem的任何继承者添加到该实例中,然后创建一个QGraphicsView实例,它是一个小部件,显示所有项目及其更改。我将QGraphicsItem连接到信号以进行更改 在Qt Quick 2中,我首

我正在尝试用Qt5.1和QtQuick2编写一个游戏,它是一个新的(更快的)图形引擎。我已经阅读了几个小时的文档,但是仍然无法确定如果我想在其位置由C++代码决定的屏幕上移动项目,我们将使用什么类。 在QGraphics中,这很简单:我创建了一个QGraphicscene实例,将QGraphicsSitem的任何继承者添加到该实例中,然后创建一个QGraphicsView实例,它是一个小部件,显示所有项目及其更改。我将QGraphicsItem连接到信号以进行更改

在Qt Quick 2中,我首先阅读了
  • 只使用QML和Javascript
  • 然后我想我找到了QGraphics的等价物,即QdeCrativeEngine,QdeCrativeComponent和QDelcarativeView并准备创建具有Q_属性的自定义QML元素
    • 更新:刚才我发现QdeCrative*是Qt Quick 1,Qqqml*是等效的Qt Quick 2前缀。
    • 但后来我也发现了。
    在阅读了许多教程文档之后,我仍然不知道知道什么是“默认”解决方案。每个教程都展示了不同的内容。我被所有的例子和课程弄得不知所措

      有人能给我一个基于Qt Quaster 2的基本示例,在画布上的图像是由正在从C++中写入的正则QObjs发送的信号移动的?
    • 你能帮我把我提到的所有课程分类吗。我什么时候用哪个

    我认为你在不同层面上混淆了问题,这使得这个问题成为一个“复合”问题,应该分成几个小问题

    无论如何:

    • 当您需要一个能够承载QtQuick 2内容的
      QWindow
      时,您需要一个
      QQuickView
      QQuickWindow
      (通常前者提供了更多的便利;请参阅他们的文档)
    • QtQuick2不是基于
      QGraphicsView
      。它甚至不在QtWidgets中——您不能在那里使用任何与widgets相关的类或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++列表/模型/多个QObjices,包含精灵/字符的位置/显示在屏幕上的任何东西,然后将该列表与QML侧绑定。

    你也可以从C++写一些QQuickItem来布局它的孩子(如这里提议的):

    -

    这里有一些链接完成了PEPE的答案/详细说明如何混合QtQuik+C++:

    < > Qt Quase+/C++集成的文档页面(Qt5文档没有谷歌索引):

    解释QWidget::createWindowContainer的博客文章(仅当您希望将QtQuick2嵌入QtWidget应用程序时……否则,您可以从QtCreator使用QtQuick2应用程序的框架):


    我什么时候需要QWindow?这是我遇到的问题的一部分。使用QGraphics,我只是在布局的某个地方添加了QGraphicView。您不能直接这样做,因为
    QQuickView
    不是
    QWidget
    ;您可以使用
    QWidget::createWindowContainer
    来承载这样一个视图。