【QT表格-5】QTableView用代码设置选中状态

背景:

学习qt表格控制,写博文记录:

【QT表格-1】QStandardItem的堆内存释放需要单独delete,还是随QStandardItemModel的remove或clear自动销毁?

【QT表格-2】QTableWidget单元格结束编辑操作endEditting_qtablewidget 单元格编辑事件

【QT表格-3】QTableWidget导入/导出excel通用代码,不需要安装office,不依赖任何多余环境,甚至不依赖编程语言

【QT表格-4】由QTableView/QTableWidget显示进度条和按钮,理解qt代理delegate用法_qtablewidget代理

【QT表格-5】QTableView用代码设置选中状态

【QT表格-6】QTableWidget的currentCellChanged实现中途撤销

目的是实现用代码设置表格中的选中状态,比如选中某个单元格,或某行,某列。实际上只要能完成选中单元格,行和列都是单元格的集合,道理一样。

QTableWidget比QTableView功能更多,但最根本都是MVC模式的应用。

QTableWidget的每个单元格都是一个item。按照网上普遍的说法,只要搜这个话题,基本都是setCurrentItem,这个确实可以,但如果要选中多个呢?

方法:

我之前想不出来是因为总认为这是QTableWidget的功能,这样确实无法直接搞定。

转换思路,直接操作item即可。亦即:QTableWidgetItem::setSelected(bool select)。

game over。

例子:

比如我要实现选中多个行。直接看头文件:

#ifndef GRID_H
#define GRID_H

#include <QTableWidget>

class Grid : public QTableWidget
{
    Q_OBJECT
public:
    explicit Grid(QWidget *parent = nullptr);
    void f_SetSelectItem(const int &iRow, const int &iCol, const bool &b) { item(iRow, iCol)->setSelected(b); }
    void f_SetSelectRow(const int &iRow, const bool &b)
    {
        for (int iCol = 0; iCol < columnCount(); ++iCol)
        {
            item(iRow, iCol)->setSelected(b);
        }
    }
};

#endif // GRID_H

说明,头文件里建议简单高效一些,我是为了省事,简单试一下,所以直接写了循环。

主窗体文件里有一段是这样的:


    ui->oGrid->f_SetSelectRow(0, true);

    ui->oGrid->f_SetSelectRow(2, true);

前提是,我已经预先给表格设置了行和列,然后添加了item,一定要记着,否则如果设置的位置item是nullptr,肯定报错。

效果如下:

我是随便写了个demo,上面还有一些委托代理,无视即可。重要的是,一次性两行被选中。

本文完。

  • 6
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值