Присвоить свойство QML bool с помощью QAbstractListModel не удалось - PullRequest
0 голосов
/ 22 апреля 2019

Небольшой вопрос, я использовал QAbstractListModel для предоставления данных свойствам QML, первые 2 назначения свойств строки были в порядке, но когда я попытался назначить свойство bool 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 Class у меня есть следующие связанные коды:

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;
    }

}

Мне не удалось инвертировать состояние bool свойства test после изменения MyModel.isRunning, свойство test всегда показывало false, когда я его распечатывал.

Что меня больше всего смутило, так это выполнение TimerModel.setisRunning(index,boolFlag), MyModel.isRunning может переключаться между true / false, но свойство test не может измениться соответственно Я новичок в Qt, пожалуйста, помогите мне! Спасибо

1 Ответ

0 голосов
/ 22 апреля 2019

Я попытался повторно реализовать setData () в модели данных Cpp, это сработало.Поскольку я не реализовывал setData (), исходя из моего понимания, изменения в cpp не были "зарегистрированными" в QML, верно ли это понимание?

Но я использовал подход без setData () (мой предыдущий подход, только с сигналом dataChange ()), чтобы изменить данные в cpp, свойство строки QML может измениться соответственно, я не могу понять, почему это сработало?

//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")
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...