我正在創建一個自定義QPushButton。如果按鈕有一個圖標,我希望圖標居中在按鈕上。如果按鈕有文本,我希望文本位於按鈕的中心。我可以處理這兩種情況。如果按鈕同時包含圖標和文本,我希望圖標居中,並在按鈕下方繪製文本,位於按鈕矩形外部。我正在使用樣式表中的邊框圖像繪製按鈕圖像。繪製QPushButton文本關閉按鈕
內MyPushButton ::的paintEvent()我計算出一個矩形,並使用繪製圖標:
style()->drawItemPixmap(&p, iconRect, Qt::AlignLeft | Qt::AlignVCenter,
this->icon().pixmap(iconRect.size()));
我再計算按鈕下方的文本矩形,並做到這一點:
style()->drawItemText(&p, textRect, Qt::AlignCenter, (this->palette()),
true, this->text(), QPalette::ButtonText);
但文字不可見。
我認爲這必須與指定的「可繪製」區域有關,但我無法弄清楚如何擴展該區域,以便按鈕圖像不會填充要放置文本的區域。
我可以做一個QStyle :: drawControl()重載,但我不知道爲什麼。當我將代碼追蹤到CE_PushButtonLabel的情況下,myStyle-> rect已經被調整爲足夠大以適應按鈕圖像和文本。
你有一個[QToolButton(http://qt-project.org/doc/qt-5.0/qtwidgets/qtoolbutton.html)試圖用? – RobbieE
我看着QToolButton,但我不希望文本出現在圖標下方。我希望它出現在「明顯」按鈕圖像下方。想象一下,在Designer中放置一個QPushButton。通過屬性列表添加一個「圖標」屬性。然後將QLabel放置在按鈕的邊界下方。但是QLabel的內容會反映按鈕的「文本」屬性。我可以這樣做,但肯定有辦法繪製按鈕背景,然後更改按鈕的範圍,以便我可以在指定位置添加文本? – user2429682