在QtCreater中,我在项目中添加了一个表格。在我的代码中,我生成一些数据输出到表中。我想在每行中添加QCheckbox
以允许选择行。表的所有内容都左对齐,如何只在每行的第一列中的这些复选框与中心对齐?
我正在使用
添加QCheckbox
ui->data_table->setCellWidget(rowCount,0, new QCheckBox);
答案 0 :(得分:7)
对Barry Mavin赞不绝口!你甚至不必子类。
一行......
pCheckBox->setStyleSheet("margin-left:50%; margin-right:50%;");
完成!!
答案 1 :(得分:5)
我通常使用布局和容器小部件。这是一个丑陋的解决方案,但它确实有效:
QWidget * w = new QWidget();
QHBoxLayout *l = new QHBoxLayout();
l->setAlignment( Qt::AlignCenter );
l->addWidget( <add your checkbox here> );
w->setLayout( l );
ui->data_table->setCellWidget(rowCount,0, w);
所以基本上你会有:
Table Cell -> Widget -> Layout -> Checkbox
如果您需要访问表格中的复选框,则必须考虑它。
答案 2 :(得分:5)
它对我有用,但我的复选框没有完全显示。
要获得窗口小部件的完整视图,请删除布局中的边距:
1→setContentsMargins(0,0,0,0);
答案 3 :(得分:4)
这是一篇旧帖子,但实际上有一种更容易,更轻松的方法来实现这一点,只需要子类QCheckBox
并将stylesheet
设置为
margin-left:50%;
margin-right:50%;
答案 4 :(得分:1)
如围绕Stack Overflow的类似问题所述,它目前是一个开放的BUG:
答案 5 :(得分:0)
#if QT_VERSION < 0x046000
#include <QCommonStyle>
class MyStyle : public QCommonStyle {
public:
QRect subElementRect(SubElement subElement, const QStyleOption *option, const QWidget *widget = 0) const {
switch(subElement) {
case QStyle::SE_CheckBoxIndicator: {
QRect r = QCommonStyle::subElementRect(subElement, option, widget);
r.setRect( (widget->width() - r.width())/2, r.top(), r.width(), r.height());
return QRect(r);
}
default: return QCommonStyle::subElementRect(subElement, option, widget);
}
}
};
#else
#include <QProxyStyle>
#include <QStyleFactory>
class MyStyle: public QProxyStyle {
public:
MyStyle():QProxyStyle(QStyleFactory::create("Fusion")) {}
QRect subElementRect(SubElement subElement, const QStyleOption *option, const QWidget *widget = 0) const {
switch(subElement) {
case QStyle::SE_CheckBoxIndicator: {
QRect r = QProxyStyle::subElementRect(subElement, option, widget);
r.setRect( (widget->width() - r.width())/2, r.top(), r.width(), r.height());
return QRect(r);
}
default: return QProxyStyle::subElementRect(subElement, option, widget);
}
}
};
#endif
QCheckBox *box = new QCheckBox();
box->setStyle(new MyStyle());
答案 6 :(得分:0)
也可以使用布局成为这样的中心
// Create a widget that will contain a checkbox
QWidget *checkBoxWidget = new QWidget();
QCheckBox *checkBox = new QCheckBox(); // We declare and initialize the checkbox
QHBoxLayout *layoutCheckBox = new QHBoxLayout(checkBoxWidget); // create a layer with reference to the widget
layoutCheckBox->addWidget(checkBox); // Set the checkbox in the layer
layoutCheckBox->setAlignment(Qt::AlignCenter); // Center the checkbox
layoutCheckBox->setContentsMargins(0,0,0,0); // Set the zero padding
ui->my_table_view->setCellWidget(row_number,column_number, checkBoxWidget); // set cell widget
或仅添加左右边距
checkBox->setStyleSheet("margin-left:50%; margin-right:50%;");