2017-10-28 116 views
0

在我的項目中,我設法使用組件填充網格佈局中的一些按鈕。但我不能將樣式組件添加到按鈕。這是我的代碼:樣式表不能在qml中使用動態按鈕

Component { 
    id: itemgroup 
    Button { } 
} 

function addButton() { 
    for(var i = 0 ; i < 10 ; i++) { 
    var button = itemgroup.createObject (gridX, { 
              "id": "btnitemgroup", 
              "style": buttonstyle, 
              "text" :"hai" 
             }); 
    } 
} 
+0

你有什麼要求?你是否需要在每次調用函數時改變'buttonstyle',或者還有另一個原因,你爲什麼不設置你設置組件的風格?使用JS函數的原因是什麼,而不是使用'Repeater'作爲聲明方式? – derM

+0

@derM沒有使用JS函數的具體原因。它們之間有什麼主要區別 –

+0

JS創建的對象是垃圾回收。 GC往往是越野車,那些可以避免它們的人是有福的。此外,這是一個風格問題:QML是一種聲明性語言,所以良好的風格保持聲明性。此外,複雜的JS表達式是C++/QML/JS語言棧中最慢的部分,因爲它們沒有經過優化,並且在運行時被解析。 – derM

回答

0
import QtQuick 2.6 
import QtQuick.Window 2.2 
import QtQuick.Controls 1.3 
import QtQuick.Controls.Styles 1.3 

Window { 
    visible: true 
    width: 500 
    height: 500 
    id:root 
    Grid 
    { 
     id:gridX 
    } 
    function addButton (row) { 

     var styleButton = 'import QtQuick 2.6;import QtQuick.Controls 1.3 
      import QtQuick.Controls.Styles 1.3; Button { text:"hai"; style: ButtonStyle { 
      background: Rectangle { 
       implicitWidth: 100 
       implicitHeight: 25 
       border.width: control.activeFocus ? 2 : 1 
       border.color: "red" 
       radius: 10 
       } 
       } 
      }' 

     for(var i = 0 ; i < 10 ; i++) { 
      Qt.createQmlObject(styleButton, gridX); 
     } 
    } 
    Component.onCompleted: 
    { 
     addButton() 
    } 
} 

enter image description here