用QAbstractListModel分配QML bool属性失败

时间:2019-04-22 14:21:26

标签: c++ qt qml

一个小问题,我使用QAbstractListModel向QML属性提供数据,前2个字符串属性分配可以,但是当我尝试分配布尔QML属性时,分配失败。 我的代码如下:

ListView
        model: MyModel
        delegate:
        MyItem {
        test: MyModel.isRunning   //test is the bool property and isRunning is the bool role in MyModel
        MouseArea{
              anchors.fill: parent
              onClicked: {
              MyModel.setisRunning(index,boolFlag)  //invert MyModel.isRunning

       }
    }

在MyModel类中,我具有以下相关代码:

void MyModel::setisRunning(int itemIndex, bool isRunning)
{
    mItem[itemIndex]->setRunningState(isRunning);
    emit dataChanged(index(itemIndex,2), index(itemIndex,2),QVector<int>() << TimerRole);
}

在MyItem类中,我具有以下相关代码:

void MyItem::setRunningState(bool isRunning)
{
   if(isRunning!=m_isRunning)
    {
       m_isRunning = isRunning;
    }

}

更改MyModel.isRunning后,我无法反转测试属性的布尔状态,当我将其打印出来时,测试属性始终显示为“ false”。

最令我困惑的是执行TimerModel.setisRunning(index,boolFlag)MyModel.isRunning可以在true / false之间切换,但是测试属性无法相应地更改 我是Qt新手,请帮帮我!谢谢

1 个答案:

答案 0 :(得分:0)

我尝试在Cpp数据模型中重新实现setData(),它起作用了。由于我没有重新实现setData(),根据我的理解,cpp中的更改不是在QML中 “已注册” ,这种理解正确吗?

但是我使用了不带setData()的方法(我以前的方法,仅带有dataChange()信号的方法)来更改cpp中的数据,QML字符串属性可能会相应地更改,我不明白为什么这样做有效? / p>

//change data in cpp
void MyModel::setTime(int itemIndex)
{
    mItem[itemIndex]->setTime(QDateTime::currentDateTime());
    emit dataChanged(index(itemIndex,0), index(itemIndex,0),QVector<int>() << TimerRole);

}

//in QML
   time: Qt.formatTime(model.time, "hh:mm:ss")