C++에서 QML로 QColor를 전달하여 사용자 지정 QQuickPaintedItem의 QColor 속성을 설정하려고합니다. 나는 다음을 시도했다 :Qml QColor 형식 오류
- QColor를 QVariant로 변환. JS 디버거에서 색상 객체가 비어 있습니다.
- 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 버전이라고 생각한다.
getBackgroundColor의 구현을 제공 할 수 있습니까?Qt 문서의 – MrEricSir
: _ C++과 통합 할 때 C++에서 QML로 전달 된 QColor 값은 자동으로 색상 값으로 변환되고 그 반대의 경우도 마찬가지입니다. QString – folibis
이 아닌'getBackgroundColor'에서 QColor를 반환해야합니다. 이전에 QColor. 그 방법을 시도했을 때 JS 디버거는 객체가 비어있는 것을 보여 주었고 여전히 유형 오류가 발생했습니다. 이것은 단지 최근의 시도였습니다. 문자열을 사용하여 색상을 설정할 수 있다는 것을 알고 있기 때문에 문자열을 사용하려고했습니다. 예 : color : "# 003300"은 QML 내에서 유효한 구문입니다. C++에서 전달할 때 작동하지 않을지 확실하지 않았습니다. – jecjackal