在QtCreater我添加了一个表,我的项目。 在我的代码,我产生了一些数据,以输出到表中。 我想一个添加QCheckbox
到每一行,以允许选择的行。 该表的所有内容左对齐,如何让我只有这些复选框中的每一行的第一列对齐到中心?
我加入了QCheckbox
使用:
ui->data_table->setCellWidget(rowCount,0, new QCheckBox);
在QtCreater我添加了一个表,我的项目。 在我的代码,我产生了一些数据,以输出到表中。 我想一个添加QCheckbox
到每一行,以允许选择的行。 该表的所有内容左对齐,如何让我只有这些复选框中的每一行的第一列对齐到中心?
我加入了QCheckbox
使用:
ui->data_table->setCellWidget(rowCount,0, new QCheckBox);
我通常使用的布局,并为这个容器构件。 这是一个丑陋的解决方案,但它的工作原理:
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
你必须考虑,如果你将需要通过访问表的复选框。
两个大拇指巴里Mavin! 你甚至不用到子类。
一条线...
pCheckBox->setStyleSheet("margin-left:50%; margin-right:50%;");
完成!
它为我,但我的复选框未完全显示。
有小部件的完整视图,删除布局边距:
1-> setContentsMargins(0,0,0,0);
这是一个老的文章,但其实有实现这一目标,只要继承的更容易和轻巧的方式QCheckBox
并设置stylesheet
来
margin-left:50%;
margin-right:50%;
由于围绕堆栈溢出类似的问题指出,这是目前开放的BUG:
https://bugreports.qt-project.org/browse/QTBUG-5368
#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());