如果您设置固定的复选框大小,则文本将与复选框本身对齐。在标准布局方向下,文本将在框之后开始,而在从右到左的布局中,文本将在框之前结束,就像这样(边框只是小部件的边框,表示小部件的实际大小,不要混淆):
有没有办法将文本与另一侧对齐来实现这一点:
正如您提到的,您有一个固定大小的 QCheckBox。无需子类化就可以很容易地使用样式表获得所需的 QCheckBox。但不幸的是text-align属性只适用于QPushButton和QProgressBar。但是您可以使用的备用样式表是:
QCheckBox{
spacing:100px;
}
使用QCheckBox 的RightToLeft方向和此样式表,您的复选框已准备就绪!:) 。根据您的应用更改间距。
希望这可以帮助。
您可以尝试从 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;
}