2014-09-29 1 views
0

C++에서 QML로 QColor를 전달하여 사용자 지정 QQuickPaintedItem의 QColor 속성을 설정하려고합니다. 나는 다음을 시도했다 :Qml QColor 형식 오류

  1. QColor를 QVariant로 변환. JS 디버거에서 색상 객체가 비어 있습니다.
  2. QColor를 색상 문자열 "#RRGGBB"로 변환 중입니다. 여전히 형식 오류가 발생합니다.

QML 코드 :

m_DisplayScreens[m_DisplayScreens.length].backgroundColor = m_Model.getBackgroundColor(i_Timer); 

m_DisplayScreens 내 사용자 정의 QML 위젯의 목록입니다. 같은 것을함으로써 backgroundColor 속성을 올바르게 설정할 수 있습니다.

DisplayScreen 
{ 
    backgroundColor: "Red" 
} 

"m_Model"개체는 단순히 QML 양식의 '백엔드'인 QObject입니다. 다음과 같이 getBackgroundColor에 대한 코드는 다음과 같습니다

Q_INVOKABLE QString getBackgroundColor(int index);  
QString CountDownPanelModel::getSegmentColor(int index) 
{ 
    return "#003300"; 
} 

특정 오류 : xxx.js : 19 : 형식 오류 : 어떤 도움을 주시면 감사하겠습니다

입력 오류입니다. 나는 지금 몇 시간 동안 내 머리를 두드리는 소리를 지르고있다.

감사합니다,

JEC

1 편집 :

좋아 여러분, 여기 QColor를 돌려 내 시도이다;

class CountDownPanelModel : public QObject 
{ 
    Q_OBJECT 
public: 
    explicit CountDownPanelModel(QObject *parent = 0); 
    ~CountDownPanelModel() = default; 

    Q_INVOKABLE QColor getBackgroundColor(int index); 
    Q_INVOKABLE QColor getSegmentColor(int index); 
}; 




QColor CountDownPanelModel::getBackgroundColor(int index) 
{ 
    return QColor(44, 44, 44); 
    //return m_TimerList->at(index)->getTimerData()->getBackgroundColor(); 
} 


QColor CountDownPanelModel::getSegmentColor(int index) 
{ 
    return QColor(200, 200, 200); 
    //return m_TimerList->at(index)->getTimerData()->getSegmentColor(); 
} 

QColor를 사용한 결과는 QString을 사용하는 것과 같습니다. 색상을 지정하는 줄에 "유형 오류"가 표시됩니다. 예를 들어 :

var m_DisplayScreens = []; 

function createDisplays() 
{ 
    m_DisplayScreens = []; 
    var timerCount = m_Model.getTimerCount(); 
    var bg = m_Model.getBackgroundColor(0); 
    var fg = m_Model.getSegmentColor(0) 
    for (var i_Timer = 0; 
     i_Timer < timerCount; 
     ++i_Timer) 
    { 
     var component = Qt.createComponent("DynamicSevenSegmentDisplay.qml"); 
     var display = component.createObject(m_Panel); 
     display.initialize(m_Model.getSevenSegmentDisplayInitializer()) 
     display.y = 100 * (i_Timer); 
     m_DisplayScreens[m_DisplayScreens.length] = display; 
     m_DisplayScreens[m_DisplayScreens.length].backgroundColor = m_Model.getBackgroundColor(i_Timer); 
     m_DisplayScreens[m_DisplayScreens.length].segmentColor = m_Model.getSegmentColor(i_Timer) 
    } 
    m_Panel.height = 100 * timerCount; 

} 

그냥 완성도, 여기 DynamicSevenSegmentDisplay.qml

SevenSegmentDisplayScreen 
{ 
    y: 0 
    height: 100 
    width: parent.width - x 

    backgroundColor: "Black" 
    borderPercentage: 10 
    displayCount: 20 
    text: "1234567890" 
    anchors.left: m_SettingsButton.right 
    anchors.leftMargin: 8 
} 

이다 나는에 관해서는 완전히 혼란 스러워요 왜 수 없습니다 backgroundColor로에 assignthe QColor. 디버거는 'value'열에 아무것도 표시하지 않습니다. 나는 이것을 'null'의 JS 버전이라고 생각한다.

+0

getBackgroundColor의 구현을 제공 할 수 있습니까?Qt 문서의 – MrEricSir

+0

: _ C++과 통합 할 때 C++에서 QML로 전달 된 QColor 값은 자동으로 색상 값으로 변환되고 그 반대의 경우도 마찬가지입니다. QString – folibis

+0

이 아닌'getBackgroundColor'에서 QColor를 반환해야합니다. 이전에 QColor. 그 방법을 시도했을 때 JS 디버거는 객체가 비어있는 것을 보여 주었고 여전히 유형 오류가 발생했습니다. 이것은 단지 최근의 시도였습니다. 문자열을 사용하여 색상을 설정할 수 있다는 것을 알고 있기 때문에 문자열을 사용하려고했습니다. 예 : color : "# 003300"은 QML 내에서 유효한 구문입니다. C++에서 전달할 때 작동하지 않을지 확실하지 않았습니다. – jecjackal

답변

0

이것은 명확한 대답은 아니지만 몇 가지 문제점을 발견했습니다. 이전에 Linux Mint를 사용하여 개발 중이었습니다. 최근 우분투로 전환하여 C++과 QML간에 데이터를 전달할 때 몇 가지 문제점을 발견했습니다. CRC 미스 매치에 대한 메시지를 받았습니다.

"/usr/lib/x86_64-linux-gnu/dri/i915_dri.so"에있는 디버그 정보가 "/usr/lib/x86_64-linux-gnu/dri/i965_dri.so"와 일치하지 않습니다 CRC 불일치). "

그래서이 또한 문제의 일부일 수 있습니다. 하지만 대부분의 경우 내 개발 기계처럼 보입니다.