В 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
Вы должны будете рассмотреть это, если вам нужно будет получить доступ к флажку через таблицу.
Два больших пальца для Барри Мавина! Вам даже не нужно создавать подклассы.
одна линия…
pCheckBox->setStyleSheet("margin-left:50%; margin-right:50%;");
сделанный!!
У меня это работает, но мой флажок отображается не полностью.
Чтобы получить полное представление о виджете, удалите поля в макете:
l-> setContentsMargins (0,0,0,0);
Это старый пост, но на самом деле есть гораздо более простой и легкий способ добиться этого, просто подкласс QCheckBox
и установить stylesheet
в
margin-left:50%;
margin-right:50%;
Как указано в аналогичном вопросе о Stack Overflow, в настоящее время это открытая ошибка:
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());