ui.tableWidget->setFocusPolicy(Qt::NoFocus);或设置样式
QXXX:focus{outline: none;}
这样列中就没有那个框虚线了
虚框是去掉了,但是checkbox不能居中:
QTableWidgetItem* checkItem = new QTableWidgetItem();
checkItem->setTextAlignment(Qt::AlignHCenter | Qt::AlignVCenter);// (Qt::AlignHCenter | Qt::AlignVCenter);
checkItem->setCheckState(Qt::Checked);
ui.tableWidget_CAN->setItem(rowCount, 0, checkItem);
checkItem->setFlags(checkItem->flags()& (~Qt::ItemIsEditable));
setTextAlignment没有效果,看来还是要自己建,把上面代码注释掉,不要了
换成代码:
QCheckBox* checkB = new QCheckBox(this); //创建checkbox
checkB->setCheckState(Qt::Checked); //设置状态
checkB->setStyleSheet("QCheckBox::indicator {width: 20px; height: 20px;}\
QCheckBox::indicator:unchecked {image:url(:/images/unchecked.png);}\
QCheckBox::indicator:checked{image:url(:/images/checked.png);}");
QWidget* w = new QWidget(this); //创建一个widget
QHBoxLayout* hLayout = new QHBoxLayout(); //创建布局
hLayout->addWidget(checkB); //添加checkbox
hLayout->setMargin(0); //设置边缘距离 否则会很难看
hLayout->setAlignment(checkB, Qt::AlignCenter); //居中
w->setLayout(hLayout); //设置widget的布局
ui.tableWidget_CAN->setCellWidget(rowCount, 0, w);
响应事件也要更改:
Qt::CheckState state;
//state = ui.tableWidget_CAN->item(i, 0)->checkState();
QWidget* w = ui.tableWidget_CAN->cellWidget(i, 0);//先获取widget
QCheckBox* checkBox = qobject_cast<QCheckBox*>(w->children().at(1)); //通过children来访问checkbox
if (checkBox)
state = (checkBox->checkState());
else
state = Qt::Unchecked;
//把之前的state = ui.tableWidget_CAN->item(i, 0)->checkState();注释掉,不要了
🆗搞定,全部选中:
for (int i = 0; i < rowCount; i++)
{
//QTableWidgetItem * Item = ui.tableWidget_CAN->item(i, 0);
//Item->setCheckState( Qt::Checked);//: Qt::Unchecked
QWidget* w = ui.tableWidget_CAN->cellWidget(i, 0);//先获取widget
QCheckBox* checkBox = qobject_cast<QCheckBox*>(w->children().at(1)); //通过children来访问checkbox
checkBox->setCheckState(Qt::Checked);//: Qt::Unchecked
}
哈哈,QT真好用