固定のチェックボックスサイズを設定すると、テキストはチェックボックス自体に揃えられます。標準のレイアウト方向では、テキストはボックスの直後から始まり、右から左へのレイアウトでは、このようにボックスの直前で終わります(境界線はウィジェットの実際のサイズを示すためのウィジェットの境界線です) 、混同しないでください):
これを実現するために、テキストを反対側に揃える方法はありますか?
あなたが言ったように、固定サイズの 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;
}