我有一個QToolButton。我使用它而不是QPushButton,因爲我需要一個類似標籤的外觀按鈕。 即使在將樣式表的邊框和填充設置爲None-0px
後,QPushButton也太粗糙了。如何對齊QToolButton的文本(單獨)
我想這QToolButton包含一個文本(無圖標)對齊的權利。
但是,text-align: right;
不起作用。 .setAlignment(Qt.AlignRight)
也不起作用。
如何將文本對齊?
謝謝。
我有一個QToolButton。我使用它而不是QPushButton,因爲我需要一個類似標籤的外觀按鈕。 即使在將樣式表的邊框和填充設置爲None-0px
後,QPushButton也太粗糙了。如何對齊QToolButton的文本(單獨)
我想這QToolButton包含一個文本(無圖標)對齊的權利。
但是,text-align: right;
不起作用。 .setAlignment(Qt.AlignRight)
也不起作用。
如何將文本對齊?
謝謝。
您可以嘗試子類QStyle並重新實現QStyle :: drawControl()以將文本對齊到右側。檢查文件qt/src/gui/styles/qcommonstyle.cpp,看看它是如何完成的。 (對不起,我用C++而不是Python)
case CE_ToolButtonLabel:
if (const QStyleOptionToolButton *toolbutton
= qstyleoption_cast<const QStyleOptionToolButton *>(opt)) {
QRect rect = toolbutton->rect;
int shiftX = 0;
int shiftY = 0;
if (toolbutton->state & (State_Sunken | State_On)) {
shiftX = proxy()->pixelMetric(PM_ButtonShiftHorizontal, toolbutton, widget);
shiftY = proxy()->pixelMetric(PM_ButtonShiftVertical, toolbutton, widget);
}
// Arrow type always overrules and is always shown
bool hasArrow = toolbutton->features & QStyleOptionToolButton::Arrow;
if (((!hasArrow && toolbutton->icon.isNull()) && !toolbutton->text.isEmpty())
|| toolbutton->toolButtonStyle == Qt::ToolButtonTextOnly) {
int alignment = Qt::AlignCenter | Qt::TextShowMnemonic;
對齊按鈕的內容(圖標&文本)來中心的這個例子,但是你可以通過這個例子您的要求(調整到右)。覆蓋QToolButoon :: paintEvent作爲下一個:
void CMyToolButton::paintEvent(QPaintEvent*)
{
QStylePainter sp(this);
QStyleOptionToolButton opt;
initStyleOption(&opt);
const QString strText = opt.text;
const QIcon icn = opt.icon;
//draw background
opt.text.clear();
opt.icon = QIcon();
sp.drawComplexControl(QStyle::CC_ToolButton, opt);
//draw content
const int nSizeHintWidth = minimumSizeHint().width();
const int nDiff = qMax(0, (opt.rect.width() - nSizeHintWidth)/2);
opt.text = strText;
opt.icon = icn;
opt.rect.setWidth(nSizeHintWidth);//reduce paint area to minimum
opt.rect.translate(nDiff, 0);//offset paint area to center
sp.drawComplexControl(QStyle::CC_ToolButton, opt);
}
這是非常好的,這是一個好主意!從C++轉換到Python應該不成問題。非常感謝你! – Phil