文章目录

  • 1. 内容概述
  • 2. 设置表格行数和列数
  • 3. 设置表格水平表头
  • 4. 设置单元格编辑状态
  • 5. 设置单元格内容
  • 5.1 单元格内容的基础设置操作
  • 5.2 单元格内容的实用设置操作
  • 6. 单元格编辑后触发cellChanged信号
  • 7. 单元格添加QCombo Box部件
  • 7.1 当comboBox下拉选择变化的时候触发currentIndexChanged(const QString &text)信号
  • 8. 源码


1. 内容概述

控件常用操作简述,主要涵盖如下内容:

  1. 设置表格行数和列数
  2. 设置表格水平表头
  3. 设置单元格编辑状态
  4. 设置单元格内容
  5. 单元格编辑后触发cellChanged信号(单元格的值修改为不一样后才会触发)
  6. 单元格添加Combo Box部件

qtablewidget 设置项item可编辑_代码实现

2. 设置表格行数和列数

表格效果

qtablewidget 设置项item可编辑_代码实现_02

代码实现

//设置表格行数
ui->tableWidget->setRowCount(4);
//设置表格列数
ui->tableWidget->setColumnCount(2);

3. 设置表格水平表头

表格效果

qtablewidget 设置项item可编辑_qt_03


代码实现

//设置水平表头
QStringList strList;
strList <<tr("参数名")<< tr("参数值");
ui->tableWidget->setHorizontalHeaderLabels(strList);

4. 设置单元格编辑状态

代码实现

QTableWidgetItem *pItem = new QTableWidgetItem("MaxNum");
pItem->setFlags(Qt::ItemIsEnabled); //设置当前单元格编辑状态为浅色不可编辑,具体详见Qt帮助文档中的枚举体,陈列了各种编辑状态
ui->tableWidget->setItem(0,0,pItem);

5. 设置单元格内容

5.1 单元格内容的基础设置操作

表格效果

qtablewidget 设置项item可编辑_代码实现_04


代码实现

ui->tableWidget->setItem(0,0,new QTableWidgetItem(tr("MaxNum")));   //设置第0行第0列单元格内容
ui->tableWidget->setItem(0,1,new QTableWidgetItem(tr("10")));  		//设置第0行第1列单元格内容

5.2 单元格内容的实用设置操作

表格效果

qtablewidget 设置项item可编辑_qt_05


代码实现

//数据准备
    QList<QString> strParamName;
    strParamName << tr("MaxNum") << tr("MinScore")<< tr("Circularity") << tr("abc");
    QList<QString> strParamValue;
    strParamValue << tr("10") << tr("60")<< tr("0.5") << tr("20");
    //循环设置4行2列所有单元格的内容
    for (int nRow = 0; nRow < 4; nRow++)
    {
        int nColumn = 0;
        //设置第1列内容,并且设置为不可编辑
        QTableWidgetItem *pItem = new QTableWidgetItem(strParamName.at(nRow));
        pItem->setFlags(Qt::ItemIsEnabled);              //设置编辑状态为浅色不可编辑
        ui->tableWidget->setItem(nRow,nColumn++,pItem);  //设置第1列内容
        //设置第2列内容
        ui->tableWidget->setItem(nRow,nColumn,new QTableWidgetItem(strParamValue.at(nRow)));
    }

6. 单元格编辑后触发cellChanged信号

注:当编辑的单元格的内容变化后,才会触发;如果内容一致,则不会触发。

//编辑完成后触发cellChanged信号
 connect(ui->tableWidget,&QTableWidget::cellChanged,
            [=](int row,int column)
                {
                    qDebug() <<tr(" row = ") << row << tr(" column = ")<< column << ui->tableWidget->item(row,column)->text();
                });

7. 单元格添加QCombo Box部件

表格效果

qtablewidget 设置项item可编辑_代码实现_06


代码实现

//添加部件Combo Box到单元格中
QComboBox *pComboBox = new QComboBox();
pComboBox->addItem("BlackOnWhite");
pComboBox->addItem("WhiteOnBlack");
ui->tableWidget->setCellWidget(0,1,pComboBox); //添加到底0行第1列单元格中

7.1 当comboBox下拉选择变化的时候触发currentIndexChanged(const QString &text)信号

//绑定ComboBox值改变信号
    void (QComboBox::*p)(const QString &str) =&QComboBox::currentIndexChanged;
    connect(pComboBox,p,  [=](QString str)
    {
            qDebug() << "str = "<<str;
    });

8. 源码

#include "mywidget.h"
#include "ui_mywidget.h"
#include <QComboBox>
#include <QDebug>


MyWidget::MyWidget(QWidget *parent)
    : QWidget(parent)
    , ui(new Ui::MyWidget)
{
    ui->setupUi(this);

    //设置行数
    ui->tableWidget->setRowCount(4);
    //设置列数
    ui->tableWidget->setColumnCount(2);

    //设置水平表头
    QStringList strList;
    strList <<tr("参数名")<< tr("参数值");
    ui->tableWidget->setHorizontalHeaderLabels(strList);

    //设置内容
   // ui->tableWidget->setItem(0,0,new QTableWidgetItem(tr("MaxNum")));

    //数据准备
    QList<QString> strParamName;
    strParamName << tr("MaxNum") << tr("MinScore")<< tr("Circularity") << tr("abc");
    QList<QString> strParamValue;
    strParamValue << tr("10") << tr("60")<< tr("0.5") << tr("20");

    for (int nRow = 0; nRow < 4; nRow++)
    {
        int nColumn = 0;
        //设置第1列内容,并且设置为不可编辑
        QTableWidgetItem *pItem = new QTableWidgetItem(strParamName.at(nRow));
        pItem->setFlags(Qt::ItemIsEnabled);              //设置编辑状态为浅色不可编辑
        ui->tableWidget->setItem(nRow,nColumn++,pItem);
        //设置第2列内容
        ui->tableWidget->setItem(nRow,nColumn,new QTableWidgetItem(strParamValue.at(nRow)));
    }
    
    //编辑完成后触发cellChanged信号
    connect(ui->tableWidget,&QTableWidget::cellChanged,[=](int row,int column)
                {
                    qDebug() <<tr(" row = ") << row << tr(" column = ")<< column << ui->tableWidget->item(row,column)->text();
                });

    //添加部件Combo Box到cell中
    QComboBox *pComboBox = new QComboBox();
    pComboBox->addItem("BlackOnWhite");
    pComboBox->addItem("WhiteOnBlack");
    ui->tableWidget->setCellWidget(0,1,pComboBox);

    //绑定ComboBox值改变信号
    void (QComboBox::*p)(const QString &str) =&QComboBox::currentIndexChanged;
    connect(pComboBox,p,
            [=](QString str)
    {
            qDebug() << "str = "<<str;
    });
}

MyWidget::~MyWidget()
{
    delete ui;
}