2016-09-27 43 views
1

這個問題是關於QtQuick 1.1,QML,GUI創建在QtQuick裝載1.1

所以我創建了一個組件以3項(圖像或RECT等),因爲這是該組件後如何刪除項目在我的應用程序的很多屏幕上重用。

在一個特定的屏幕上只需要2個項目。

那麼如何在導入組件後刪除這一項。

下面的代碼僅僅是理解概念

我的組件就像

//Mycomponent.qml 
Rectangle { 
    *code* 
    item { id: item1; *some code* } 
    item { id: item2; *some code* } 
    item { id: item3; *some code* }} 

我的屏幕文件將

//MyScreen.qml 
Rectangle { 
    MyComponent{ } 
    *some Code* 
    } 

因此,如何重複使用相同的組件,只是刪除從它的一個項目?

如果我的問題不對,請糾正我。

謝謝!

+0

可能你只是想設置'item.visible = false'?只需將布爾屬性別名添加到組件並將其鏈接到項目的一個可見屬性 – folibis

回答

3

在大多數情況下,您只需更改對象的可見性即可。

visible: false 

opacity: 0 

例如,你可以爲它添加別名屬性。

//Mycomponent.qml 
Rectangle { 
    id: myRect 
    property alias item1Visible: item1.visible 
    Item { id: item1; } 
    Item { id: item2; } 
    Item { id: item3; }} 

然後你就可以在JS做

myRect.item1Visible = false 

您可以刪除dynamicaly created對象。

rect.destroy(); 

雖然你可以刪除一般靜態創建的對象,但這是個壞主意。

+0

我明白了。所以你的意思是設置屬性的項目,可能會改變,並設置可見虛假的項目......謝謝 –

2

我會建議進一步將您的單個項目分成更小的組件,並在其上構建更大的組件。在未來的組件中,可能會給您更好的可重用性,因爲您可以根據需要組合更小的組件。喜歡的東西:

//MyReusableOne.qml 
Item { 
    *code* 
} 

//MyReusableTwo.qml 
Item { 
    *code* 
} 

//MyReusableThree.qml 
Item { 
    *code* 
} 

//MyBiggerBlockOne.qml 
Rectangle { 
    MyReusableOne{ id: item1; } 
    MyReusableThree{ id: item2; } 
} 


,然後用它們爲:

//MyScreen.qml 
Rectangle { 
    MyBiggerBlockOne{ } 
    *some Code* 
    MyBiggerBlockTwo{ } 
    *some Code* 
    } 

如果你堅持你所描述的方式,一個蹩腳的方式可能是:

Item 
{ 
    property var inValidItems : ['item2'] 
    Component 
    { 
     id: item1 
     Rectangle { color: "red"; width: 100; height: 100 } 
    } 

    Component 
    { 
     id: item2 
     Rectangle { color: "green"; width: 100; height: 100 } 
    } 

    Component 
    { 
     id: item3 
     Rectangle { color: "yellow"; width: 100; height: 100 } 
    } 

    Loader { id: loader1; sourceComponent: item1; y : 0 } 
    Loader { id: loader2; sourceComponent: item2; y : 100} 
    Loader { id: loader3; sourceComponent: item3; y : 200} 

    Component.onCompleted: 
    { 
     if(inValidItems.indexOf('item1') >= 0) 
      loader1.sourceComponent = undefined 

     if(inValidItems.indexOf('item2') >= 0) 
      loader2.sourceComponent = undefined 

     if(inValidItems.indexOf('item3') >= 0) 
      loader3.sourceComponent = undefined 
    } 
} 

附:代碼僅用於描述,不檢查語法錯誤。希望你明白這個主意。

+0

我完全同意你的想法,但我有大約50可重複使用的項目在我的大塊1,和50在我的大塊2.所以,如果我想刪除只有2或3項,這是更好的。你有什麼建議? –

+0

我認爲@Konstantin的回答在這種情況下會對你更好。 –