簡體   English   中英

Qml QColor類型錯誤

[英]Qml QColor Type Error

我試圖通過將QColor從C ++傳遞到QML來設置自定義QQuickPaintedItem的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”對象只是一個QObject,它是QML形式的“后端”。 getBackgroundColor的代碼如下:

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

具體的錯誤是:xxx.js:19:TypeError:類型錯誤

任何幫助,將不勝感激。 我已經為此努力了幾個小時。

謝謝,

傑克

第一次編輯:

好的,這是我返回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
}

我對為什么不能將QColor分配給backgroundColor感到完全困惑。 調試器在“值”列中什么也不顯示。 我認為這是'null'的JS版本。

這不是一個明確的答案,但我發現了幾個問題。 我以前使用Linux Mint進行開發。 我最近改用Ubuntu,發現在C ++和QML之間傳遞數據存在一些問題。 我收到一條有關CRC錯過比賽的消息。

“在“ /usr/lib/x86_64-linux-gnu/dri/i915_dri.so”中找到的調試信息與“ /usr/lib/x86_64-linux-gnu/dri/i965_dri.so”不匹配(CRC不匹配)。 ”

因此,這也可能是問題的一部分。 但在大多數情況下,它看起來像是我的開發機器。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM