Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/oop/2.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
Qt qml支持面向对象编程吗 我使用QML来做我的项目,我想知道我是否在另一个文件中实例化一个文件,它是否像C++类的实例化对象?_Qt_Oop_Qml_Qtquick2 - Fatal编程技术网

Qt qml支持面向对象编程吗 我使用QML来做我的项目,我想知道我是否在另一个文件中实例化一个文件,它是否像C++类的实例化对象?

Qt qml支持面向对象编程吗 我使用QML来做我的项目,我想知道我是否在另一个文件中实例化一个文件,它是否像C++类的实例化对象?,qt,oop,qml,qtquick2,Qt,Oop,Qml,Qtquick2,File.qml Rectangle { id: idRect1 . . } File2.qml Rectangle { id: idRect2 File1 { id:idFile1 . . } } 在File2.qml中,我初始化了File1,这是否意味着我创建了File1类型的对象?请分享一些关于所有这些机制如何工作的知识(链接)。提前感谢在QML中创建首字母大写的文件时,您正在创建一个组件。组件是使用OOP聚合(而不是子类化)实现的。这

File.qml

Rectangle {
  id: idRect1
  .
  .
}
File2.qml

Rectangle {
  id: idRect2

  File1 {
    id:idFile1
    .
    .
  }
}

在File2.qml中,我初始化了File1,这是否意味着我创建了File1类型的对象?请分享一些关于所有这些机制如何工作的知识(链接)。提前感谢

在QML中创建首字母大写的文件时,您正在创建一个组件。组件是使用OOP聚合(而不是子类化)实现的。这意味着如果我写

// MyButton.qml
import QtQuick 2.0;
Rectangle {
    id: base;
    width: 120;
    height: 40;
    color: "lightgray";

    Text {
        text: "foobar";
        anchors.centerIn: parent;
    }
}
。。。我没有将矩形子类化,我只是创建了一个组件,其中包含一个矩形作为根对象,并以某种方式对其进行配置,然后在其中添加一个文本对象

组件一经创建,就可以通过简单地编写以下内容来实例化:

MyComponent { id: myNewInstance; }
因为这是QML中的一种工作方式

组件名称是一类(但不是在C++或JS方式中定义),它也可以用作属性的类型:

property MyComponent theComponent : myNewInstance;
然后,它可以保存使用给定组件创建的对象的ID,有点像C/C++指针:该属性保存指向实际对象的链接

但由于QML的设计方式,即使它更多的是聚合而不是子类化,自定义组件的根对象类型的属性也可以保存派生组件的ID,在我的例子中:

property Rectangle theComponent : myNewInstance;
将工作,但如果我尝试放置图像、文本或其他内容的ID,QML引擎将抛出不兼容类型错误


我希望它能帮助你。< /p>为什么你贴上了这个C++?是的,我可以删除它,但是我认为标记一个面向对象的语言会对这个问题有更多的回应。@ MAHESHE有一个<代码> OOP 标签,它可以一直被使用。是的,你是对的。