如何用Qt实现组件供QML使用

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了如何用Qt实现组件供QML使用相关的知识,希望对你有一定的参考价值。

参考技术A 用Qt实现一个UI:一个圆形图标在圆圈内或圆圈上拖动,但不能拖出到圆圈外。当拖动到圆圈上时,高亮图标和圆圈。类似有RingLock。1、继承 uickPaintedItem类,该类为 uickItem的子类。 uickItem用于不用显示UI的供QML使用的组件; uickPaint

Qt5 - 在 QML TableView 中显示动态数据模型

【中文标题】Qt5 - 在 QML TableView 中显示动态数据模型【英文标题】:Qt5 - Display dynamic Data Model in QML TableView 【发布时间】:2014-01-23 02:20:35 【问题描述】:

我正在为 GUI 开发一个跟踪窗口。我在 QML 端使用 TableView 元素来显示将不断更新的数据。如何用数据填充此元素?元素的数量以及每个元素的数据每隔几毫秒就会发生变化。

我认为信号/插槽实现会是理想的,当数据发生变化时,会产生一个触发插槽函数以更新 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

【问题讨论】:

什么是traceTableModel?我会在 C++(QAbstractItemModel 和子类)中将其作为模型并相应地从 C++ 进行更新。 弗兰克,我已经阅读了一些关于 QAbstractItemModel 的内容。我会再检查一下并尝试让它工作。如果你有任何好的例子,请告诉我。 【参考方案1】:

您对 QML 模型的使用很奇怪。您不想对每一列都使用自定义角色。这是没有意义的。您也不需要自定义 QQuickItem 类。

基本流程是:

    正确实现派生自QAbstractListModelQAbstractTableModel 的类。

    将此类的实例绑定到 QML 视图的模型。

这里有完整的(如编译和运行)参考供您阅读:

Qml 2.0 TableView with QAbstractItemModel and Context Menu

How to Use Models with QML?

Remove rows from QAbstractListModel

【讨论】:

以上是关于如何用Qt实现组件供QML使用的主要内容,如果未能解决你的问题,请参考以下文章

如何用资源中没有的其他图像替换 QML(Qt)文件上的图像

如何用颜色填充 box2d-qml 多边形?

Qt5 - 在 QML TableView 中显示动态数据模型

qt qml 利用xmlhttprequest 调用有赞api

如何在qt qml中更改地图上代表组件的颜色

如何在 Blackberry Cascades qml 和 qt 中点击列表项组件