-
关于TableWidget中插复选框CheckBox的问题,有下面两种方法
-
方法一
void TelinkWidget::initTableWidget()
{
myTablecolor[0] = QColor(0,50,250);
myTablecolor[1] = QColor(50,150,0);
myTablecolor[2] = QColor(250,128,64);
myTablecolor[3] = QColor(250,50,50);
myTablecolor[4] = QColor(128,0,255);
ui->tableWidget->verticalHeader()->setVisible(true);
for(int i = 0; i <5; i++){
QTableWidgetItem *myCheckBox = new QTableWidgetItem();
myCheckBox->setCheckState(Qt::Checked);
ui->tableWidget->setItem(0, i, myCheckBox); //插入复选框
}
for(int i = 0; i <5; i++){
QTableWidgetItem *myItemColor = new QTableWidgetItem();
myItemColor->setBackgroundColor(myTablecolor[i]);
ui->tableWidget->setItem(1, i, myItemColor); //插入表格颜色
}
connect(ui->tableWidget, SIGNAL(cellChanged(int,int)), this, SLOT(checkBoxChanged(int, int)));
}
//复选框发生改变
void TelinkWidget::checkBoxChanged(int row, int col)
{
if(ui->tableWidget->item(row, col)->checkState() == Qt::Checked){//选中
...
}
}
效果图:
方法一在表格中插入复选框的方式比较简单,当复选框不互斥的时候就可以使用,但是当复选框互斥的时候,我们就需要采用第二种方式 ,也就是将CheckBox 加入QButtonGroup中,这种方法网上可以查到。那么问题是,加入以后,由于我们的CheckBox在TableWidget里面,要如何触发才能得知我每次选择的是哪个复选框呢?
其中我实验了多次才看到官方库里面的信号与槽函数:
其中一定要注意的是,在把CheckBox加入QButtonGroup中的时候,一定要带上ID,否则在槽函数里面打印出来的可能就是负数了。
-
方法二
void CalibrationTool::initTableWidget() { QButtonGroup *group = new QButtonGroup(this); ui->tableWidget->verticalHeader()->setVisible(true); for(int i = 0; i <12; i++){ QCheckBox *checkitem = new QCheckBox(this); checkitem->setObjectName("common_checkbox"); ui->tableWidget->setCellWidget(i, 0, checkitem); group->addButton(checkitem,i);//设置互斥复选框,一定要写入ID } connect(group, SIGNAL(buttonClicked(int )), this, SLOT(onButtonClicked(int ))); } void CalibrationTool::onButtonClicked(int row ) { qDebug()<<"hello"<<row ;//打印当前选择的第几个checkBox }
效果图:
-