Reputation: 2708
I'm developing a trace window for a GUI. I'm using a TableView element on the QML side to display data that will be constantly updating. How can I populate this element with data? The numbers of elements changes, along with each element's data, every few milliseconds.
I'm thinking a signals/slots implementation would be ideal, when the data changes, produce a signal that triggers a slot function to update the values shown in the TableView? Something along those lines.
Thanks in advance!
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; }
}
....
#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();
}
#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
Upvotes: 5
Views: 11838
Reputation: 98425
Your use of the model from the QML is weird. You don't want to use custom roles for every column. This makes no sense. Neither do you need to have custom QQuickItem
classes.
The basic process is:
Properly implement a class deriving from QAbstractListModel
or QAbstractTableModel
.
Bind the instance of such a class to the model of a QML View.
Here are complete (as in compile-and-run) references for your perusal:
Upvotes: 2