6

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

有没有办法将文本与另一侧对齐来实现这一点:

在此处输入图像描述

4

2 回答 2

9

正如您提到的,您有一个固定大小的 QCheckBox。无需子类化就可以很容易地使用样式表获得所需的 QCheckBox。但不幸的是text-align属性只适用于QPushButtonQProgressBar。但是您可以使用的备用样式表是:

QCheckBox{
spacing:100px;
}

使用QCheckBox 的RightToLeft方向和此样式表,您的复选框已准备就绪!:) 。根据您的应用更改间距。
希望这可以帮助。
这是我的输出

于 2012-09-26T08:56:26.200 回答
0

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

#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;
}

于 2012-09-26T08:36:47.727 回答