QTableWidget,以cellWidgets为中心

时间:2017-09-26 19:43:19

标签: c++ qt qtablewidget qtablewidgetitem qcheckbox

有没有办法将QCheckBox作为QTableWidget的单元格窗口小部件放置在单元格的中心,而不是左侧,而不添加QWidget并将复选框添加到其中#39;布局?

2 个答案:

答案 0 :(得分:2)

使用setCellWidget将QCheckBox添加到表格中:

QWidget *checkBoxWidget = new QWidget(); //create QWidget
QCheckBox *checkBox = new QCheckBox();   //create QCheckBox
QHBoxLayout *layoutCheckBox = new QHBoxLayout(checkBoxWidget); //create QHBoxLayout 
layoutCheckBox->addWidget(checkBox);     //add QCheckBox to layout
layoutCheckBox->setAlignment(Qt::AlignCenter); //set Alignment layout
layoutCheckBox->setContentsMargins(0,0,0,0);

ui->tableWidget->setCellWidget(0,0, checkBoxWidget);

screenshot

还可以使用这些行调整内容:

ui->tableWidget->resizeRowsToContents();
ui->tableWidget->resizeColumnsToContents();
  

setCellWidget:设置要在单元格中显示的给定窗口小部件   在给定的行和列中,将窗口小部件的所有权传递给   桌子。

参考:https://evileg.com/en/post/79/

答案 1 :(得分:0)

如果您想使用ui->tableWidget->resizeColumnsToContents(),我有一个简单的解决方案,没有任何其他布局:

使用checkBox->setStyleSheet( "text-align: center; margin-left:50%; margin-right:50%;" );

此后,致电ui->tableWidget->resizeColumnsToContents()

如果此后调整了列的大小(例如,表格通过布局调整了大小),则可能必须再次调用ui->tableWidget->resizeColumnsToContents()

在知道结果的列宽之前将其放置在小部件上,并保持其(错误的)位置。使用resizeColumnsToContents()可以重新放置它。