6

有没有办法将QCheckBox作为单元格小部件放置在单元格QTableWidget的中心,而不是在左侧,而不需要额外QWidget的并将复选框添加到它的布局中?

4

2 回答 2

8

用于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/

于 2017-09-26T19:46:51.227 回答
2

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

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

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

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

如果在结果列宽已知之前放置小部件,它会保留其(错误)位置。使用 resizeColumnsToContents() 重新定位它。

于 2019-11-08T13:56:42.697 回答