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:所选区域的结束列号。