Qml QColor类型错误

时间:2014-09-29 00:23:11

标签: c++ qt qml

我试图通过将QColor从C ++传递到QML来设置自定义QQuickPaintedItem的QColor属性。我尝试过以下方法:

  1. 将QColor转换为QVariant。在JS调试器中,颜色对象是空的。
  2. 将QColor转换为颜色字符串"#RRGGBB"。这仍然会引发类型错误。
  3. QML代码:

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

    m_DisplayScreens是我的自定义QML小部件的列表。我可以通过做类似的事情来设置backgroundColor属性。

    DisplayScreen
    {
        backgroundColor: "Red"
    }
    

    " m_Model" object只是一个QObject,后面是'后端' QML表格。 getBackgroundColor的代码如下:

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

    具体错误是:xxx.js:19:TypeError:输入错误

    任何帮助将不胜感激。我现在已经对这个问题敲了几个小时。

    谢谢,

    JEC

    第一次编辑:

    好的伙计,这是我在返回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相同。我得到了#34; Type Error"在线我分配颜色。例如:

    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。调试器只显示&#39;值&#39;柱。我认为这是&#39; null&#39;。

    的JS版本

1 个答案:

答案 0 :(得分:0)

这不是一个明确的答案,但我发现了几个问题。我以前使用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不匹配)。“

所以这也可能是问题的一部分。但在大多数情况下,它看起来就像是我的开发机器。