增加Qt中文本和复选框之间的空间

时间:2012-09-26 07:57:13

标签: c++ qt qcheckbox

如果设置固定的复选框大小,文本将与复选框本身对齐。使用标准布局方向,文本将在框后面开始,并且使用从右到左布局,它将在框之前结束,就像这样(边框只是小部件的边框到表示小部件的实际大小,不要混淆):

有没有办法将文本与另一方对齐以实现此目的:

enter image description here

2 个答案:

答案 0 :(得分:8)

正如您所提到的,您有一个固定大小的QCheckBox 。如此轻松地没有子类化,你可以使用样式表来获得你想要的QCheckBox。但遗憾的是, text-align 属性仅适用于 QPushButton QProgressBar 。但是您可以使用的备用样式表是:

QCheckBox{
spacing:100px;
}

使用 RightToLeft 指示您的QCheckBox和此样式表,您的复选框已准备就绪! :)。根据您的申请更改间距 希望这有帮助。
here is my output

答案 1 :(得分:0)

您可以尝试从CheckBox继承并绘制您想要的内容。查看此示例自定义按钮(向按钮上的文本添加阴影)。

#include "CustomButton.h"
#include <QStylePainter>
#include <QStyleOptionButton>
#include <QMenu>


CustomButton::CustomButton(QWidget *parent):
    QPushButton(parent)
{
}

void CustomButton::paintEvent(QPaintEvent *event)
{
    QStylePainter p(this);
    QFontMetrics font = this->fontMetrics();

    QRect textRect = font.boundingRect(text());
    int x = rect().center().x()-textRect.center().x();
    int y = rect().center().y()-textRect.center().y();
    ++y;
    p.drawControl(QStyle::CE_PushButton, getStyleOption()); //draw button with stylesheet
    QStyleOptionButton opt = getStyleOption();
    opt.text = text();
    QPen tempPen = p.pen();
    p.setPen(Qt::white);
    p.drawText(x, y,  text()); //draw text shadow on the button
    p.setPen(tempPen);
    p.drawControl(QStyle::CE_PushButtonLabel, opt); //draw text with stylesheet 
    //QPushButton::paintEvent(event);
}

QStyleOptionButton CustomButton::getStyleOption() const
{
    QStyleOptionButton opt;
    opt.initFrom(this);
    opt.features = QStyleOptionButton::None;
    if (isFlat())
        opt.features |= QStyleOptionButton::Flat;
    if (menu())
        opt.features |= QStyleOptionButton::HasMenu;
    if (autoDefault() || isDefault())
        opt.features |= QStyleOptionButton::AutoDefaultButton;
    if (isDefault())
        opt.features |= QStyleOptionButton::DefaultButton;
    if (isDown() || (menu() && menu()->isVisible()))
        opt.state |= QStyle::State_Sunken;
    if (isChecked())
        opt.state |= QStyle::State_On;
    if (!isFlat() && !isDown())
        opt.state |= QStyle::State_Raised;
    //opt.text = text();
    opt.icon = icon();
    opt.iconSize = iconSize();

    return opt;
}

#include "CustomButton.h" #include <QStylePainter> #include <QStyleOptionButton> #include <QMenu> CustomButton::CustomButton(QWidget *parent): QPushButton(parent) { } void CustomButton::paintEvent(QPaintEvent *event) { QStylePainter p(this); QFontMetrics font = this->fontMetrics(); QRect textRect = font.boundingRect(text()); int x = rect().center().x()-textRect.center().x(); int y = rect().center().y()-textRect.center().y(); ++y; p.drawControl(QStyle::CE_PushButton, getStyleOption()); //draw button with stylesheet QStyleOptionButton opt = getStyleOption(); opt.text = text(); QPen tempPen = p.pen(); p.setPen(Qt::white); p.drawText(x, y, text()); //draw text shadow on the button p.setPen(tempPen); p.drawControl(QStyle::CE_PushButtonLabel, opt); //draw text with stylesheet //QPushButton::paintEvent(event); } QStyleOptionButton CustomButton::getStyleOption() const { QStyleOptionButton opt; opt.initFrom(this); opt.features = QStyleOptionButton::None; if (isFlat()) opt.features |= QStyleOptionButton::Flat; if (menu()) opt.features |= QStyleOptionButton::HasMenu; if (autoDefault() || isDefault()) opt.features |= QStyleOptionButton::AutoDefaultButton; if (isDefault()) opt.features |= QStyleOptionButton::DefaultButton; if (isDown() || (menu() && menu()->isVisible())) opt.state |= QStyle::State_Sunken; if (isChecked()) opt.state |= QStyle::State_On; if (!isFlat() && !isDown()) opt.state |= QStyle::State_Raised; //opt.text = text(); opt.icon = icon(); opt.iconSize = iconSize(); return opt; }