1. 对视图设置
QTableView->horizontalHeader()->setSectionResizeMode(0, QHeaderView::Fixed); //对第0列单独设置固定宽度
QTableView->setColumnWidth(0, 40); //设置固定宽度
2. 在视图中某一列添加控件
for (int i = 0; i < Row.size(); i++)
{
for (int j = 0; j < 11; j++)
{
switch(j)
{
case CHECK:
{
// QWidget
QWidget *CheckWidget = new QWidget;
// QHBoxLayout - new QHBoxLayout(QWidget)表示删除Widget时不需要管布局和控件
QHBoxLayout *CheckLayout = new QHBoxLayout(CheckWidget);
// QCheckBox
QCheckBox *CheckBox = new QCheckBox(CheckWidget);
CheckWidget->setLayout(CheckLayout); // 给Widget设置布局
CheckLayout->setSpacing(0);
CheckLayout->setMargin(0);
CheckLayout->addWidget(CheckBox); // 添加CheckBox
CheckLayout->setAlignment(CheckBox, Qt::AlignCenter);// 设置控件在布局中居中
this->mCheckBoxVec.append(CheckWidget); // 添加到容器-更新页面时删除
// 首次循环时 i = 0; // 行数
// 首次循环时 CHECK=1; // 列数
mTableView->setIndexWidget(mStandardModel->index(i,CHECK),CheckWidget);
/*
// 视图所属checkbox,但是使用这段代码时(使用时,需要将上边未注释的代码都注释掉),checkbox无法控制居中
QStandardItem *checkbox = new QStandardItem();
checkbox->setCheckable(true);
checkbox->setCheckState(Qt::Unchecked);
checkbox->setTextAlignment(ITEMSHOWFORMAT);
mItem.append(checkbox);
mStandardModel->setItem(i, CHECK ,mItem[WindowTableWidget::mItemIndex]);
WindowTableWidget::mItemIndex++;
*/
break;
}
case ······
{
}
}
}
}
3. 上述代码添加进视图后,在更新视图时,需要删除设置的Qwidget
// 我的删除方法
if(!this->mCheckBoxVec.isEmpty()) // CheckBox Widget Vec
{
// 尝试删除
qDebug() << "尝试删除 Check Box Vec." << endl;
qDeleteAll(this->mCheckBoxVec);
}
this->mCheckBoxVec.clear();