QTableWidget,如何使cellWidgets居中显示?

6
有没有一种方法可以将QCheckBox作为QTableWidget单元格小部件放置在单元格的中心位置,而不是左侧,而不需要其他的QWidget并将复选框添加到其布局中?
2个回答

11

使用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);

截图

同时使用以下代码调整内容大小:

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

setCellWidget:在指定的行和列中设置给定的小部件以显示,并将小部件所有权传递给表格。

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


这个方法是有效的。然而,它并没有解决如何在表格单元中对齐QCheckBox的问题,而且不使用额外的QWidget作为QCheckBox的父级。虽然我还没有找到更好的解决办法。 - Mike Finch

2

如果您想要使用 ui->tableWidget->resizeColumnsToContents(),我有一个简单的解决方案,无需任何额外的布局:

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

在此之后,调用 ui->tableWidget->resizeColumnsToContents()

如果该列在此之后被调整大小(例如表格由布局调整大小),则可能需要再次调用 ui->tableWidget->resizeColumnsToContents()

如果小部件在确定结果列宽度之前放置,则会保留其(错误的)位置。使用 resizeColumnsToContents() 可以重新定位它。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接