QT开发中文网

qml 使用C++的TableModel

在Qt中,可以使用C++的自定义TableModel来与QML进行交互。下面是一个简单示例:

  1. 创建一个继承自QAbstractTableModel的C++类,例如CustomTableModel
  2. CustomTableModel中实现必要的方法,如rowCount、columnCount、data等。这些方法用于提供数据给QML界面。
  3. CustomTableModel对象注册到QML环境中,使其可以在QML中访问。
  4. 在QML文件中引入注册的C++类型,并创建TableView和TableColumn等组件。
  5. 将C++的TableModel对象绑定到TableView的model属性上。

以下是一个简单示例代码:

C++端:

// customtablemodel.h
#ifndef CUSTOMTABLEMODEL_H
#define CUSTOMTABLEMODEL_H

#include <QAbstractTableModel>
#include <QStringList>

class CustomTableModel : public QAbstractTableModel
{
    Q_OBJECT

public:
    explicit CustomTableModel(QObject *parent = nullptr);

    int rowCount(const QModelIndex &parent = QModelIndex()) const override;
    int columnCount(const QModelIndex &parent = QModelIndex()) const override;
    QVariant data(const QModelIndex &index, int role = Qt::DisplayRole) const override;

private:
    QStringList m_data;
};

#endif // CUSTOMTABLEMODEL_H

// customtablemodel.cpp
#include "customtablemodel.h"

CustomTableModel::CustomTableModel(QObject *parent)
    : QAbstractTableModel(parent)
{
    m_data << "Apple" << "Banana" << "Orange" << "Grapes";
}

int CustomTableModel::rowCount(const QModelIndex &parent) const
{
    Q_UNUSED(parent);
    return m_data.count();
}

int CustomTableModel::columnCount(const QModelIndex &parent) const
{
    Q_UNUSED(parent);
    return 1;
}

QVariant CustomTableModel::data(const QModelIndex &index, int role) const
{
    if (!index.isValid())
        return QVariant();

    if (role == Qt::DisplayRole)
        return m_data.at(index.row());

    return QVariant();
}

注册C++类型:

// main.cpp
#include <QGuiApplication>
#include <QQmlApplicationEngine>
#include "customtablemodel.h"

int main(int argc, char *argv[])
{
    QCoreApplication::setAttribute(Qt::AA_EnableHighDpiScaling);

    QGuiApplication app(argc, argv);

    qmlRegisterType<CustomTableModel>("CustomTypes", 1, 0, "CustomTableModel");

    QQmlApplicationEngine engine;
    const QUrl url(QStringLiteral("qrc:/main.qml"));
    QObject::connect(&engine, &QQmlApplicationEngine::objectCreated,
                     &app, [url](QObject *obj, const QUrl &objUrl) {
        if (!obj && url == objUrl)
            QCoreApplication::exit(-1);
    }, Qt::QueuedConnection);
    engine.load(url);

    return app.exec();
}

QML端:

import QtQuick 2.15
import QtQuick.Controls 2.15

import CustomTypes 1.0 // 导入自定义的C++类型

ApplicationWindow {
    visible: true
    width: 400
    height: 300
    title: "Table View Example"

    TableView {
        id: tableView
        anchors.fill: parent

        model: CustomTableModel {} // 绑定自定义的C++ TableModel对象

        TableColumn {
            role: "display"
            title: "Fruits"
            width: tableView.width / 2 - 10
        }
        
        // 其他的TableColumn

        itemDelegate: Item {
            Text {
                text: styleData.value
            }
        }
    }
}

以上示例中,我们创建了一个CustomTableModel类继承自QAbstractTableModel,并在其中实现了必要的方法。然后将其注册为C++类型供QML使用。在QML文件中引入该类型,并使用TableView和TableColumn组件进行显示。

这样,你就可以通过C++的TableModel来提供数据给QML界面,实现与C++的交互了。


内容由零声教学AI助手提供,问题来源于学员提问

本站部分文章来源于网络,版权归原作者所有,如有侵权请联系站长删除。
转载请注明出处:https://qt.0voice.com/?id=5166

分享:
扫描分享到社交APP
上一篇
下一篇
发表列表
游客 游客
此处应有掌声~
评论列表

还没有评论,快来说点什么吧~

联系我们

在线咨询: 点击这里给我发消息

微信号:3007537140

上班时间: 10:30-22:30

关注我们
x

注册

已经有帐号?