QTableWidget中插入复选框及点击表头排序

 

关键词:QTableWidget(控件),复选框,点击表头排序

 

为了在Qt中实现在表中插入复选框、以及点击表头实现排序功能(要求有的列按数值排序、有的列按字典序排序),耗费了我好几天时间,还是比较痛苦的几天,在网上查了相关资料,将其总结如下。

 

创建一个对话框,向对话框添加QTableWidget控件,并栅格布局(“Lay out in a Grid”)。在对话框的构造函数中插入代码(此处仅仅是为了易于实现,这些代码当然也可写在别的函数中),整个类的实现代码如下:

#include "mydialog.h"

#include "ui_mydialog.h"

#include <QTableWidgetItem>

 

MyDialog::MyDialog(QWidget *parent)

    : QDialog(parent)

    , ui(new Ui::MyDialog)

{

    ui->setupUi(this);

 

    int nRowCount = 100;    //  行数

    int nColCount = 10;     //  列数

 

    ui->tableWidget->setRowCount(nRowCount);    //  设置行数

    ui->tableWidget->setColumnCount(nColCount); //  设置列数

 

    QTableWidgetItem * newItem = nullptr;

    int nCheckBoxCol = 0;    //  复选框所在的列号(从0开始)

    //  填写表格内容

    for(int i=0; i<nRowCount; i++){

        for(int j=0; j<nColCount; j++){

            newItem = new QTableWidgetItem();

            if(j==nCheckBoxCol){

                newItem->setData(Qt::DisplayRole, i+1); //  数字排序

                newItem->setCheckState(Qt::Checked);    //  设置复选框

            }else{

                newItem->setText(tr("%1").arg(i*nColCount+j+1));    //  字符排序

            }

            ui->tableWidget->setItem(i,j,newItem);

        }

    }

 

    //  设置表格单元内容不可编辑

    ui->tableWidget->setEditTriggers(QAbstractItemView::NoEditTriggers);

 

    //  使能排序

    ui->tableWidget->setSortingEnabled(true);

 

    //  表头设置最后一列数据填充整个控件

    //ui->tableWidget->horizontalHeader()->setStretchLastSection(true);

 

    //  表头内容均分填充整个控件

    ui->tableWidget->horizontalHeader()->setSectionResizeMode(QHeaderView::Stretch);

}

 

MyDialog::~MyDialog()

{

    delete ui;

}

 

运行效果如下图所示。

 

图中第一列是复选框所在列,点击表头时按照数值大小排序;其他列点击表头时按字典序排列。

 

 

 

 

 

 

 

 

  • 1
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Alexabc3000

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值