Qt下QTableWidget 基本用法

QTableWidget的基本设置

设置表头

ui->tableWidget->setColumnCount(11);
ui->tableWidget->setRowCount(10);
ui->tableWidget->setHorizontalHeaderLabels(QStringList() << “Id” << “Name” << “Unit” << “Value” << “Min” << “Max” << “Type” << “Mode” << “Enable” << “Last read” << “Last write”);
ui->tableWidget->verticalHeader()->setVisible(false); // 隐藏水平header
ui->tableWidget->setSelectionBehavior(QAbstractItemView::SelectItems); // 单个选中
ui->tableWidget->setSelectionMode(QAbstractItemView::ExtendedSelection); // 可以选中多个

整行选中

ui->tableWidget->setSelectionBehavior ( QAbstractItemView::SelectRows);
ui->tableWidget->setSelectionMode(QAbstractItemView::SingleSelection);

内容居中

ui->tableWidget->item(i,j)->setTextAlignment(Qt::AlignHCenter|Qt::AlignVCenter);

单元格不可编辑

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

让table失去焦点

ui->tableWidget->setFocusPolicy(Qt::NoFocus);

表格添加一行

int iRow = ui->tableWidget->rowCount();
ui->tableWidget->setRowCount(iRow + 1);

隐藏某一列

ui->tableWidget->setColumnHidden(3,true);

删除所有行

for(int i=0;i<nRowCount;i++)
{
ui->tableWidget->removeRow(0);
}

设置与获取控件

    某单元格设置为控件 
    QComboBox *cbbSN=new QComboBox();
    QStringList listSN;
    listSN<<"A1"<<"A2"<<"A3"<<"A4"<<"B1"<<"B2"<<"B3"<<"B4"<<"C1"<<"C2";
    cbbSN->addItems(listSN);
    ui->tableWidget->setCellWidget(row,col,cbbSN);
	
	获取控件
	QComboBox *cbbSN=(QComboBox *)(ui->tableWidget->cellWidget(row,column));

   //判断单元格是QComboBox还是普通Item
   //是QComboBox
   if( tableWidget->cellWidget(i, 1) != NULL )
   {
        auto cellWidget = ( tableWidget->cellWidget(i, 1) );
       ComboBox *combox=(QComboBox*)cellWidget;
       sInsert = combox->currentText();
       insertValue.append( sInsert );
   }
   //普通表格单元
   else
   {
       //
   }

QTableWidget 中插入QCheckBox复选框,状态判断,居中显示
https://blog.csdn.net/hss2799/article/details/109581878

设置某列不可编辑

设置QTableWidget的某些字段不可编辑和背景颜色
在这里插入图片描述
/* 设置不可修改的Id Name两列的背景颜色为灰色 */
for(int i = 0; i < rowCount; i++) {
QTableWidgetItem *item = new QTableWidgetItem();
item->setBackground(QBrush(QColor(Qt::lightGray)));
item->setFlags(item->flags() & (~Qt::ItemIsEditable));
ui->tableWidget->setItem(i, 0, item);
}

设置某列可编辑

QTableWidgetItem *item = new QTableWidgetItem();
item->setFlags(item->flags() | Qt::ItemIsEditable);

设置某列为复选框

QTableWidgetItem* item=ui->tabCurve->item(i,0)
item->setCheckState(Qt::Unchecked)

QTableWidget表格内容自适应列宽

void QHeaderView::setSectionResizeMode(ResizeMode mode)

QHeaderView::Interactive
用户可以调整部分的大小。 也可以使用resizeSection()以编程方式调整该部分的大小。 段大小默认为defaultSectionSize。 (另请参见cascadingSectionResizes。)

QHeaderView::Fixed
用户无法调整该部分的大小。 只能使用resizeSection()以编程方式调整该部分的大小。 段大小默认为defaultSectionSize。

QHeaderView::Stretch
QHeaderView将自动调整该部分的大小以填充可用空间。 大小不能由用户或以编程方式更改。屏幕不够大时,会自动缩小,不出现滚动条。

QHeaderView::ResizeToContents
QHeaderView将自动调整该部分的大小以填充可用空间。 大小不能由用户或以编程方式更改。会出现滚动条,显示完整

this->horizontalHeader()->setSectionResizeMode(QHeaderView::Stretch); //x先自适应宽度
this->horizontalHeader()->setSectionResizeMode(0, QHeaderView::ResizeToContents); //然后设置要根据内容使用宽度的列

QTableWidget如何设置选择模式

设置单行选择,通过调用setSelectionBehavior接口,设置QAbstractItemView::SelectRows的属性

tableWidget->setSelectionBehavior(QAbstractItemView::SelectRows); //选中单元格,行还是列

运行程序之后,可以看到单击之后,选中的是当前行,而不是单元格

如果表格不需要支持Ctrl、Shift、 Ctrl+A等操作方法,那么可以调用接口setSelectionMode设置属性为

QAbstractItemView::SingleSelection
tableWidget->setSelectionMode(QAbstractItemView::SingleSelection) //设置单行模式

如果想要表格支持多选模式,比如Ctrl、Shift、 Ctrl+A、鼠标左键按下滑动多选等操作方法,那么可以调用接口setSelectionMode设置属性为QAbstractItemView::ExtendedSelection
//设置单选,多选,扩展选择

tableWidget->setSelectionMode(QAbstractItemView::ExtendedSelection); //多选模式

##QTableWidget获取行号

QTableWidget::SelectedRanges()

QList<QTableWidgetSelectionRange> ranges = ui.tableWidget->selectedRanges();
if(ranges.count() == 0)
{
	qDebug() << QStringLiteral("请选择一行");
}
else
{
	for(int i  = 0; i < ranges.count(); i++)
	{
		int topRow=ranges.at(i).topRow();

       int bottomRow=ranges.at(i).bottomRow();

       for(int j = topRow; j <= bottomRow; j++)

       {
          qDebug()<<QstringLiteral("当前选择行号为:")<<j;
        }
	}
}

ranges四个参数

topRow:所选区域的开始行号;
bottomRow:所选区域的截止行号;
left:所选区域的开始列号;
right:所选区域的结束列号。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值