Qt5 - отображение динамической модели данных в QML TableView

88
3

Я разрабатываю окно трассировки для графического интерфейса. Я использую элемент TableView на стороне QML для отображения данных, которые будут постоянно обновляться. Как я могу заполнить этот элемент данными? Число элементов изменяется вместе с данными каждого элемента каждые несколько миллисекунд.


Я думаю, что реализация сигналов/слотов была бы идеальной, когда данные изменялись, выдает сигнал, который запускает функцию слота для обновления значений, отображаемых в TableView? Что-то в этом роде.


Спасибо заранее!


main.qml


import QtQuick.Controls 1.1
import QtQuick.Layouts 1.1
import QtQuick.Dialogs 1.1
import QtQuick 2.1

....
TableView {
anchors.fill: parent
id: traceTable
//table data comes from a model
model: traceTableModel
//Component.onCompleted: classInstance.popAndDisplayMsg(classInstance)
TableViewColumn { role: "index"; title: "Index"; width: 0.25 * mainWindow.width; }
TableViewColumn { role: "type"; title: "Type"; width: 0.25 * mainWindow.width; }
TableViewColumn { role: "uid"; title: "ID"; width: 0.25 * mainWindow.width; }
TableViewColumn { role: "timestamp"; title: "Timestamp"; width: 0.25 * mainWindow.width; }

}
....


main.cpp


#include "class_header.hpp"
#include <QtQuick/QQuickView>
#include <QGuiApplication>
#include <QQmlContext>

int main(int argc, char *argv[])
{
QGuiApplication app(argc, argv);

QQuickView view;

class_name instance;

view.rootContext()->setContextProperty("classInstance", &instance);

view.setResizeMode(QQuickView::SizeRootObjectToView);
view.setSource(QUrl("qml/main.qml"));
view.show();
return app.exec();
}


class_header.hpp


#ifndef class_name_HPP
#define class_name_HPP

#include <QtQuick/QQuickItem>
#include <polysync_core.h>
#include <glib.h>
#include <QString>
#include <QDebug>

class class_name : public QQuickItem
{
Q_OBJECT
//Maybe some Q_Properties here?

public:

//constructor
class_name(QQuickItem *parent = 0);
//deconstructor
~class_name();

signals:
void dataChanged();

public slots:
int updateInfo(//pass some data);

};

#endif // class_name_HPP

спросил(а) 2021-01-25T17:23:12+03:00 4 месяца, 3 недели назад
1
Решение
77

Ваше использование модели из QML является странным. Вы не хотите использовать пользовательские роли для каждого столбца. Это не имеет никакого смысла. Вам также не нужны пользовательские классы QQuickItem.


Основной процесс:


    Правильно реализовать класс, полученный из QAbstractListModel или QAbstractTableModel.


    Привяжите экземпляр такого класса к модели представления QML.


Вот полные (как в компиляции и запуска) ссылки для вашего прочтения:


ответил(а) 2021-01-25T17:23:12+03:00 4 месяца, 3 недели назад
Ваш ответ
Введите минимум 50 символов
Чтобы , пожалуйста,
Выберите тему жалобы:

Другая проблема