如果设置固定的复选框大小,文本将与复选框本身对齐。使用标准布局方向,文本将在框后面开始,并且使用从右到左布局,它将在框之前结束,就像这样(边框只是小部件的边框到表示小部件的实际大小,不要混淆):
有没有办法将文本与另一方对齐以实现此目的:
答案 0 :(得分:8)
正如您所提到的,您有一个固定大小的QCheckBox 。如此轻松地没有子类化,你可以使用样式表来获得你想要的QCheckBox。但遗憾的是, text-align 属性仅适用于 QPushButton 和 QProgressBar 。但是您可以使用的备用样式表是:
QCheckBox{
spacing:100px;
}
使用 RightToLeft 指示您的QCheckBox和此样式表,您的复选框已准备就绪! :)。根据您的申请更改间距
希望这有帮助。
答案 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;
}