QT 关于QTableWidget的常规使用

目录

一、初始化

二、封装功能用法

三、结语


一、初始化

1、设置表头

        直接在ui设计界面修改或者使用QT封装的函数修改,代码如下:

 QStringList recList = {"第一列", "第二列", "第三列"};
ui->tableWidget->setHorizontalHeaderLabels(recList);

2、设置行数、列数

//设置列
ui->tableWidget->setColumnCount(3);
//设置行
ui->tableWidget->setRowCount(3);

3、设置表格颜色交替

        很多时候为了方便查看,相邻两行需要用到不同的颜色。代码如下,这个要同时使用QSS和封装的函数

ui->tableWidget->setAlternatingRowColors(true);

//QSS表:
QTableView{
	background-color: rgb(250, 250, 250);
	alternate-background-color: rgb(232,241,250);
	font-size: 14pt;
}

4、设置列宽自适应

        有的时候不要水平滚动条的出现,即可设置列宽自适应,所有列横向占满整个表格,看着心里舒服,代码如下:

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

5、设置表格内容以及获取内容

//设置内容
int curRow = 0;//行号
int curCol= 0;//列号
ui->tableWidget->setItem(curRow, curCol, new QTableWidgetItem("这里是0列0行"));
int curRow = 1;
int curCol= 1;
ui->tableWidget->setItem(curRow, curCol, new QTableWidgetItem("这里是1列1行"));
//获取内容
QString text = ui->tableWidget->item(curRow, curCol)->text();

6、清空表格

        如果需要连同单元格都清除,则调用clear()函数,如果只是想清空表格中的内容,则调用函数clearContents(),代码示例:

ui->tableWidget->clearContents();
ui->tableWidget->clear();

7、滑动表格

        初始化有时需要用到,需要开始显示的不是第一行而是中间或者哪里,或者说刷新表格功能里头需要重新置顶

ui->tableWidget->verticalScrollBar()->setValue(0);//置顶
//横向horizontalScrollBar()

8、设置目标单元格为当前选中状态(单击单元格后的状态)

ui->tableWidget->setCurrentCell(row, col);

二、封装功能用法

1、遍历表格

        操作表格的第一步,就是要学会遍历它,遍历代码如下,下面两个例子(2、3)便是利用遍历表格封装一些函数使用。

int rowCount = tableWidget->rowCount();//行的数量
int colCount = tableWidget->columnCount();//列的数量
for (int row = 0; row < rowCount; ++row) {
    for (int col= 0; row < colCount ; ++row) {
        QTableWidgetItem *item = tableWidget->item(row, col);
        if (item) {
            qDebug() << item->text();//打印其内容
        }
    }
}

2、修改表格目标行的颜色

        有时候需要暂时改变某一行的颜色来突出显示它,也可能是其他原因需要改变一下这一行的颜色,基于遍历表格的方法封装函数代码如下,传入参数:目标函数号、表格体、颜色

void changeTableWRowColor(int curRow, QTableWidget *tableWidget, const QColor &color)
{
    for (int col = 0; col < tableWidget->columnCount(); ++col) {
        QTableWidgetItem *item = tableWidget->item(curRow, col);
        if (item) {
            item->setBackground(color);//设置背景 样例:QColor(255, 0, 0)
            //设置文字颜色:setForeground(QColor(255, 0, 0))
        }
    }
}

3、在某一列查找一个内容

        基于遍历表格的方法,遍历时判断内容,对比内容,查到即返回行号。传入参数:表格、内容、列号。可以对函数稍作修改,变为查找表格中内容所有内容进行对比,查找目标内容有几个以及对应的坐标。在某一列查找一个内容的示例封装函数如下:

int findRowByValue(QTableWidget *tableWidget, const QString &value, int col)
{
    int rowCount = tableWidget->rowCount();
    for (int row = 0; row < rowCount; ++row) {
        QTableWidgetItem *item = tableWidget->item(row, col); // 获取第一列的单元格
        if (item && item->text() == value) {
            return row; // 找到匹配的值,返回行号
        }
    }
    return -1; // 没有找到匹配的值,返回-1
}

4、设置表格内容改变时,识别内容并作出处理

        这里示例是当出现什么结果时,显示什么文字,改变槽函数示例代码如下,进入槽函数时解开信号,完成时重新绑定,以免出现回调死循环。

//表格内容显示翻译
void MainWindow::on_tableWidget_cellChanged(int row, int column)
{
    //进入时解除连接
    disconnect(ui->tableWidget, SIGNAL(cellChanged(int, int)), this, SLOT(on_tableWidget_cellChanged(int, int)));
    if(column == 1){//选定列号为1,即第二列
        QTableWidgetItem *curItem = ui->tableWidget->item(row, 1);
        //这里我已确保curItem 不会为空,如果你有删除操作则需要判断curItem 是否为空以免程序异常退出
        QString bacthSatus = curItem->text();//表格内容
        QString bacthSatusTip;
        if(bacthSatus == "11"){
            bacthSatusTip = "处理中...";
        }else if(bacthSatus == "22"){
            bacthSatusTip = "已完成!";
        }else{
            bacthSatusTip = QString("错误状态:%1").arg(bacthSatus);
        }
        curItem->setText(bacthSatusTip);
    }
    //完成时重新连接
    connect(ui->tableWidget, SIGNAL(cellChanged(int, int)), this, SLOT(on_tableWidget_cellChanged(int, int)));
}

三、结语

        以上便是我自己学习表格使用过程中常用的方法了,后续有经验了会补充。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值