2015-01-27 12 views
6

Tôi đang cố gắng lồng ghép các thuộc tính như 'font.family' hoặc 'anchors.fill', nhưng tôi không thể khởi tạo chúng theo cách thông thường vì nó in 'Không thể gán cho thuộc tính không tồn tại'. Thay vào đó, tôi buộc phải sử dụng phương thức Component.onCompleted. Chuyện gì vậy?Làm cách nào để tạo thuộc tính được nhóm/lồng nhau?

MyButtonStyling.qml:

import QtQml 2.1 

QtObject 
{ 
    property QtObject background: QtObject 
    { 
     property color pressed: "#CCCCCC" 
     property color enabled: "#666666" 
     property color disabled: "#555555" 
    } 
} 

main.qml:

import QtQuick 2.0 

Item 
{ 
    width: 400 
    height: 300 
    MyButton 
    { 
     text: "TEST" 
     styling: MyButtonStyling 
     { 
      //background.enabled: "#1B2E0A" //Cannot assign to non-existent property "enabled" 
      Component.onCompleted: 
      { 
       background.enabled = "#1B2E0A" //Works 
      } 
     } 
    } 
} 

MyButton.qml:

import QtQuick 2.0 
import QtQuick.Controls 1.0 
import QtQuick.Controls.Styles 1.0 

Button 
{ 
    property QtObject styling: MyButtonStyling {} 

    implicitWidth: 80 
    implicitHeight: 80 

    style: ButtonStyle 
    { 
     background: Item 
     { 
      Rectangle 
      { 
       anchors.fill: parent 
       color: control.pressed ? styling.background.pressed : control.enabled ? styling.background.enabled : styling.background.disabled 
      } 
     } 
    } 
} 
+1

Bạn có thể làm rõ chính xác những gì bạn đang có ý định thực hiện với các mã trên? Có thể có một cách tốt hơn để đạt được điều này, nhưng tôi không hoàn toàn rõ ràng về những gì bạn đang cố gắng làm. – MrEricSir

Trả lời

10

Hãy thử thay thế của bạn lồng nhau QtObject với một tập tin QML. Ví dụ: tôi đã thay thế bằng BackgroundTheme.qml. Bằng cách này, thuộc tính (có thể được gọi là "thuộc tính được nhóm") hoạt động chính xác, trong một ràng buộc và không có bất kỳ lỗi nào.

BackgroundTheme.qml

import QtQuick 2.0 

QtObject { 
    property color pressed: "#CCCCCC" 
    property color enabled: "#666666" 
    property color disabled: "#555555" 
} 

MyButtonStyling.qml

import QtQuick 2.0 

QtObject {  
    property BackgroundTheme background: BackgroundTheme {} 
} 
Các vấn đề liên quan