2014-07-12 24 views
2

我對我的項目使用QML,我想知道是否在另一個文件中實例化文件,是否像實例化C++類的對象?qml是否支持面向對象的編程

File.qml

Rectangle { 
    id: idRect1 
    . 
    . 
} 

File2.qml

Rectangle { 
    id: idRect2 

    File1 { 
    id:idFile1 
    . 
    . 
    } 
} 

在File2.qml我已經初始化文件1,它意味着我已經創建類型File1中的一個對象?請分享一些有關這種機制如何運作的知識(鏈接)。在此先感謝

+0

你爲什麼標記這個C++? –

+0

是的,我可以刪除,但我認爲標記面向對象的語言給這個問題更多的迴應。 – Mahesh

+0

@Maheshthere是一個'oop'標籤,可以用來替代。 –

回答

2

在QML中創建第一個字母大寫的文件時,您正在創建一個組件。組件是使用OOP聚合(而不是子類)實現的。這意味着,如果我寫

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

    Text { 
     text: "foobar"; 
     anchors.centerIn: parent; 
    } 
} 

...我還沒有子類長方形,我只是創建了一個包含一個矩形作爲根對象,而且它configurates以某種方式的組成部分,並在其中添加文本對象。

一旦一個組件被創建,它可以被簡單地寫實例化:

MyComponent { id: myNewInstance; } 

因爲這是它在QML的方式。

組件名稱是一種類的(但不是在C++或JS的方式來定義的話),它也可以用來作爲一種用於一個屬性:

property MyComponent theComponent : myNewInstance; 

然後,它可以保持使用給定組件創建的對象的ID,其行爲有點像C/C++指針:該屬性包含指向實際對象的鏈接。

但由於道路QML設計,即使是比子類更多的聚集,自定義組件的根對象的類型的屬性也可以按住派生組件的ID,在我的情況:

property Rectangle theComponent : myNewInstance; 

會工作,但如果我嘗試放置一個圖像或文本或其他東西的ID,QML引擎會拋出不兼容的類型錯誤。

我希望它能幫助你。