QT开发中文网

Qt mvc 样例代码

下面是一个使用Qt的MVC模式的样例代码:

model.h

#include <QAbstractListModel>
#include <QStringList>

class Model : public QAbstractListModel
{
    Q_OBJECT

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

    int rowCount(const QModelIndex & parent = QModelIndex()) const override;

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

    QHash<int, QByteArray> roleNames() const override;

private:
    QStringList m_items;
};

model.cpp

#include "model.h"

Model::Model(QObject *parent)
    : QAbstractListModel(parent)
{
    m_items << "apple" << "banana" << "cherry" << "date" << "elderberry";
}

int Model::rowCount(const QModelIndex &parent) const
{
    if (parent.isValid())
        return 0;

    return m_items.count();
}

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

    if (role == Qt::DisplayRole || role == Qt::EditRole)
        return m_items.at(index.row());

    return QVariant();
}

QHash<int, QByteArray> Model::roleNames() const
{
    QHash<int, QByteArray> roles;
    roles[Qt::DisplayRole] = "display";
    roles[Qt::EditRole] = "edit";
    return roles;
}

main.cpp

#include <QGuiApplication>
#include <QQmlApplicationEngine>
#include "model.h"

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

    QGuiApplication app(argc, argv);

    qmlRegisterType<Model>("com.example.model", 1, 0, "ListModel");

    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();
}

main.qml

import QtQuick 2.12
import QtQuick.Controls 2.12
import com.example.model 1.0

ApplicationWindow {
    visible: true
    width: 640
    height: 480
    title: "MVC Example"

    ListModel {
        id: model
    }

    ListView {
        anchors.fill: parent
        model: model
        delegate: Text {
            text: display
        }
    }

    Button {
        text: "Add Item"
        onClicked: {
            model.append({"display": "new item", "edit": "new item"})
        }
    }

    Button {
        text: "Remove Item"
        onClicked: {
            var index = Math.floor(Math.random() * model.count)
            model.remove(index)
        }
    }
}

此样例代码创建了一个简单的字符串列表模型,允许添加或删除项目,并通过QML界面显示。它演示了如何使用Qt的MVC模式以及如何在QML中使用自定义模型类。

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

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

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

联系我们

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

微信号:3007537140

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

关注我们
x

注册

已经有帐号?