Loading [MathJax]/jax/output/CommonHTML/config.js
前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >Qt ModelView教程——设置表头与可编辑Table

Qt ModelView教程——设置表头与可编辑Table

作者头像
用户5908113
发布于 2020-02-17 05:33:47
发布于 2020-02-17 05:33:47
3.9K10
代码可运行
举报
文章被收录于专栏:Pou光明Pou光明
运行总次数:0
代码可运行

点击上方蓝字可直接关注!方便下次阅读。如果对你有帮助,可以点个在看,让它可以帮助到更多老铁~

这篇文章是在高铁上写的。

这次继续和大家分享Qt Model/View的一些使用方法。Qt帮助文档的整体目录如下:

一、设置Table的行和列表头

只需在只读表的基础上加上

QVariant headerData(int section, Qt::Orientation orientation, int role) const Q_DECL_OVERRIDE;

并重新实现即可。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
QVariant MyModel::headerData(int section, Qt::Orientation orientation, int role) const
{
    if (role == Qt::DisplayRole)
    {
        if (orientation == Qt::Horizontal)
        {
            switch (section)
            {
            case 0:
                return QString("first");
            case 1:
                return QString("second");
            case 2:
                return QString("third");
            }
        }

        if (orientation == Qt::Vertical)
        {
            switch (section)
            {
            case 0:
                return QString("first");
            case 1:
                return QString("second");
            }
        }
    }

    return QVariant();
}

效果如下:

二、可编辑Table的实现

为了让之前只读表具备可编辑的功能,需要重新实现两个虚方法setData() and flags()

使用一个QString类型的二维数组来存储数据,并且当编辑完单元格内容时,向window title 发送文本信息,使得window title 随着单元格内容改变而改变。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
#include <QAbstractTableModel>
#include <QString>

const int COLS= 3;
const int ROWS= 2;


class MyModel : public QAbstractTableModel
{
    Q_OBJECT
public:
    MyModel(QObject *parent);
    int rowCount(const QModelIndex &parent = QModelIndex()) const Q_DECL_OVERRIDE ;
    int columnCount(const QModelIndex &parent = QModelIndex()) const Q_DECL_OVERRIDE;
    QVariant data(const QModelIndex &index, int role = Qt::DisplayRole) const Q_DECL_OVERRIDE;

    bool setData(const QModelIndex & index, const QVariant & value, int role = Qt::EditRole) Q_DECL_OVERRIDE;
    Qt::ItemFlags flags(const QModelIndex & index) const Q_DECL_OVERRIDE ;

private:
    QString m_gridData[ROWS][COLS];  //holds text entered into QTableView
signals:
    void editCompleted(const QString &);
};

每次编辑单元格的时候setData()就会被调用。index参数会告诉我们具体哪个单元格被编辑、value参数可以让我们获得单元格内具体的内容

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
bool MyModel::setData(const QModelIndex & index, const QVariant & value, int role)
{
    if (role == Qt::EditRole)
    {
        //save value from editor to member m_gridData
        m_gridData[index.row()][index.column()] = value.toString();
        //for presentation purposes only: build and emit a joined string
        QString result;
        for (int row= 0; row < ROWS; row++)
        {
            for(int col= 0; col < COLS; col++)
            {
                result += m_gridData[row][col] + " ";
            }
        }

        emit editCompleted( result );
    }
    return true;
}

各种属性在flags()函数中调整。这两个属性Qt::ItemIsSelectable | Qt::ItemIsEditable足够我们这次使用了。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
Qt::ItemFlags MyModel::flags(const QModelIndex &index) const
{
    qDebug() << index.row() << index.column();

    return Qt::ItemIsEditable | QAbstractTableModel::flags(index);

}

效果如下:

三、MainWindow中的设置

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
MainWindow::MainWindow(QWidget *parent)
    : QMainWindow(parent)
{
    tableView = new QTableView(this);
    setCentralWidget(tableView);
    QAbstractTableModel *myModel = new MyModel(this);
    tableView->setModel(myModel);

    //transfer changes to the model to the window title
    connect(myModel, SIGNAL(editCompleted(const QString &)), this, SLOT(setWindowTitle(const QString &)));
}

void MainWindow::showWindowTitle(const QString & title)
{
setWindowTitle(title);
}

最后,学不可以已!

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2020-01-12,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 Pou光明 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
1 条评论
热度
最新
大神,这个标签标成python了,应该是QT吧~
大神,这个标签标成python了,应该是QT吧~
回复回复点赞举报
推荐阅读
编辑精选文章
换一批
QTableView 一列添加两个按钮
在QTableView的一列里添加两个按钮,之前添加一个按钮的思路是一样的,只是计算了一下按钮的宽,放两个按钮而已。 本例源代码:QtTowButtons.rar 看一下列的效果 看一下添加两个按钮的
lpxxn
2018/01/31
3.8K0
QTableView 一列添加两个按钮
Qt-自定义可编辑模型
不管是哪种编程语言,在这里看不到一些系列的教程,当然也是由于笔者掌握的知识不够深,这里只会发送一些相关语言的实例,供大家参考学习。有时候笔者会分享一些自己觉得好的书籍,教学视频,或者好的学习网站给你们,这就需要你们有自学的能力,学习从来都不是件轻松的事,只有好好的坚持下去,才能成为大神。如果对于Qt有兴趣的伙伴,不妨去学习一下豆子博主的系列教程,会对你有所帮助。
kdyonly
2023/03/03
4070
QTableView 添加进度条
记录一下QTableView添加进度条 例子很小,仅供学习 使用QItemDelegate做的实现 有自动更新进度 要在.pro文件里添加  CONFIG += c++11 ProgressBar
lpxxn
2018/01/31
2.2K0
QTableView 添加进度条
QTreeView使用总结13,自定义model示例,大大优化性能和内存[通俗易懂]
前面简单介绍过Qt的模型/视图框架,提到了Qt预定义的几个model类型: QStringListModel:存储简单的字符串列表 QStandardItemModel:可以用于树结构的存储,提供了层次数据 QFileSystemModel:本地系统的文件和目录信息 QSqlQueryModel、QSqlTableModel、QSqlRelationalTableModel:存取数据库数据
全栈程序员站长
2022/09/03
2.6K0
QTreeView使用总结13,自定义model示例,大大优化性能和内存[通俗易懂]
QTableView 添加按钮
这里说一下怎么在QTableView添加一个按钮 效果是点击button弹出一个对话框。 看一下ButtonDelegate的代码 #ifndef BUTTONDELEGATE_H #define B
lpxxn
2018/01/31
2.6K0
QTableView 添加按钮
《QTreeView+QAbstractItemModel自定义模型》:系列教程之三[通俗易懂]
Qt中模型类的层次结构
全栈程序员站长
2022/07/01
6.5K0
《QTreeView+QAbstractItemModel自定义模型》:系列教程之三[通俗易懂]
60.QT-QabstractTableModel模型、重写sort方法排序
在之前25.QT-模型视图章节中,没有具体描述如何重写model模型,所以本章以QabstractTableModel为例,来谈谈model如何实现.
诺谦
2020/12/18
3.6K0
60.QT-QabstractTableModel模型、重写sort方法排序
Qt Model/View教程——只读Table
一直想学习Qt Model/View,最终还是看的官方教程,现在将官方教程重新在梳理下。
用户5908113
2020/02/12
2.1K0
【QT】QT模型/视图
MVC(Model-View-Controller)包括了3个组件:模型(model)是应用对象,用来表示数据;视图(View)是模型的用户界面,用来显示数据;控制(Controller)定义了用户界面对用户输入的反应方式。
半生瓜的blog
2023/05/13
3.1K0
【QT】QT模型/视图
Qt数据库sqlite总结
第四:QSqlTableModel  继承QSqlQueryModel类  --该类提供了一个可读写单张SQL表的可编辑数据模型,功能:修改,插入,删除,查询,和排序
bear_fish
2018/09/20
3K0
Qt官方示例解析-Address Book-基于单个数据模型在不同视图呈现不同数据
提要:Qt的这个示例主要讲的是使用代理模型,实现在不同的视图上面显示单个数据模型的数据 这个示例提供了一个地址簿,将联系人按照名称字母{"ABC", "DEF", "GHI", "JKL", "MNO", "PQR", "STU", "VW", "XYZ"}分成9个组。这是通过在同一个模型上使用多个视图实现的,每个视图都使用QSortFilterProxyModel类的一个实例进行过滤。地址簿包含5个类:MainWindow、AddressWidget、TableModel、NewAddressTab和AddDialog。MainWindow类使用AddressWidget作为其中心小部件,并提供文件和工具菜单。(与官方示例不同的地方是:MainWindow,使用AddressBook类继承了一下)
Sky_Mao
2020/07/24
5.4K0
C/C++ Qt TableDelegate 自定义代理组件
TableDelegate 自定义代理组件的主要作用是对原有表格进行调整,例如默认情况下Table中的缺省代理就是一个编辑框,我们只能够在编辑框内输入数据,而有时我们想选择数据而不是输入,此时就需要重写编辑框实现选择的效果,代理组件常用于个性化定制Table表格中的字段类型。
王瑞MVP
2022/12/23
8680
C/C++ Qt TableDelegate 自定义代理组件
Qt ModelView教程(二)——应用举例(一)
因为是为一个Table设置Model,为了快速入门,我们选择继承QAbstractTableModel。继承后需要重写三个函数,分别是Model的行数和列数、以及每个Cell需要显示的内容。
用户5908113
2020/02/12
6960
QT 播放器之列表[通俗易懂]
重写自定义菜单函数,如果右键的时候没有选中任何索引,需要把播放,删除,打开目录设置为不可点击
全栈程序员站长
2022/07/01
2K0
【QML与C++混合编程】用QVariantList传递数组类型成员
更新:Record类要用指针,QObject 不能有拷贝函数。 我有一个C++中自定义的ReaderModel,继承自QAbstractListModel类,传递给了QML。 它的me成员是一个Reader指针,Reader有个成员是RecordModel。 通过reader获取的recordModel,在qml中类型是QVariant(RecordModel),我没法把它作为一个ListView的model。 要怎么让它绑定给view呢? 我尝试者把数据拷贝到一个直接传给qml的recordModel,但是当数据之后发生了变化时,视图就不会更新,除非再次拷贝,这样效率不可观。
饶文津
2020/06/02
4K0
C/C++ Qt StringListModel 字符串列表映射组件
StringListModel 字符串列表映射组件,该组件用于处理字符串与列表框组件中数据的转换,通常该组件会配合ListView组件一起使用,例如将ListView组件与Model模型绑定,当ListView组件内有数据更新时,我们就可以利用映射将数据模型中的数值以字符串格式提取出来,同理也可实现将字符串赋值到指定的ListView组件内。
王瑞MVP
2022/12/23
7950
C/C++ Qt StringListModel 字符串列表映射组件
qml 结合 QSqlTableModel 动态加载数据 MVC「建议收藏」
发布者:全栈程序员栈长,转载请注明出处:https://javaforall.cn/127739.html原文链接:https://javaforall.cn
全栈程序员站长
2022/07/25
1.1K0
qml 结合 QSqlTableModel 动态加载数据 MVC「建议收藏」
C/C++ Qt StandardItemModel 数据模型应用
QStandardItemModel 是标准的以项数据为单位的基于M/V模型的一种标准数据管理方式,Model/View 是Qt中的一种数据编排结构,其中Model代表模型,View代表视图,视图是显示和编辑数据的界面组件,而模型则是视图与原始数据之间的接口,通常该类结构都是用在数据库中较多,例如模型结构负责读取或写入数据库,视图结构则负责展示数据,其条理清晰,编写代码便于维护。
王瑞MVP
2022/12/22
1.7K0
C/C++ Qt StandardItemModel 数据模型应用
C++ Qt开发:StandardItemModel数据模型组件
Qt 是一个跨平台C++图形界面开发库,利用Qt可以快速开发跨平台窗体应用程序,在Qt中我们可以通过拖拽的方式将不同组件放到指定的位置,实现图形化开发极大的方便了开发效率,本章将重点介绍StandardItemModel数据模型组件的常用方法及灵活运用。
王瑞MVP
2023/12/23
6320
C++ Qt开发:StandardItemModel数据模型组件
Qt-使用控件ListView
如何对ListView进行数据添加,只需要设置ListView的Model即可。 1.创建一个需要展示的数据的类
kdyonly
2023/03/03
9880
推荐阅读
相关推荐
QTableView 一列添加两个按钮
更多 >
领券
💥开发者 MCP广场重磅上线!
精选全网热门MCP server,让你的AI更好用 🚀
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
本文部分代码块支持一键运行,欢迎体验
本文部分代码块支持一键运行,欢迎体验