Я знаком с Qt некоторое время назад, но я мог бы немного ориентироваться во взаимодействиях QML / QTQuick с C ++. Я чувствую, что упускаю что-то простое здесь, но я немного застрял.
Я разрабатываю встроенную систему, отображающую состояние распределенных коммутаторов, взаимодействующих по последовательной шине. Последовательная шина запускается как отдельный поток в C ++ (всегда был Qt) и автоматически опрашивает устройства в циклическом режиме для получения обновлений от устройств.
Посмотрев на это, я нашел довольно простой пример использования модели QAbstractList для передачи статуса через свойства QML из поддерживаемого C ++. https://www.youtube.com/watch?v=9BcAYDlpuT8&list=PLo12gBvZwC78nnrZHCBowKf36ZAi7iOLW&index=4&t=0s
Изначально модель выглядела великолепно, я просто загрузил список с необходимой мне информацией и вижу ее из пользовательского интерфейса. Вопрос в том, как получить доступ к модели из C ++, чтобы обновления всплыли в пользовательском интерфейсе, когда они меняются в фоновом режиме.
Что я сделал до сих пор:
Регистрация модели:
qmlReisterType<ModelDerrivedClass>("DeviceListModel",1,0,"DeviceList")
Определение ролей:
enum {
OpenRole = Qt::UserRole,
StatusRole
}
Определение Ha sh таблица для модели
QHash<int,QByteArray> ModelDerrivedClass::roleNames() const
{
QHash<int, QByteArray> names;
names[OpenRole] = "openstatus";
names[StatusRole] = "devicestatus";
return names;
}
Создать простой список структур с правильной информацией, реализовать необходимые методы и т. д. c ... работает как шарм сверху вниз.
Как получить доступ к модели снизу вверх? Эти устройства будут обновлять состояние в соответствии с внешним вводом, о котором пользовательский интерфейс не должен знать, но эти события должны иметь возможность управлять внешним интерфейсом. Похоже, этот сценарий не учитывается.
Я также рассмотрел вопрос регистрации типа устройства с помощью QML, но не могу понять, как связать объект QML с объектом C ++, поэтому свойства READ / WRITE / NOTIFY работают с отдельными объектами QML в список. В этом сценарии я зарегистрировал бы OPEN и STATUS как свойства типа QML, которые можно было бы напрямую использовать в коде QML, но мне нужно было бы связать экземпляр объекта int C ++ с экземпляром объекта QML. Это то, над чем работает QAbstractListModel.
Любая помощь будет принята с благодарностью.