カスタム 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 は既にボタン イメージとテキストに合わせて十分な大きさにサイズ変更されています。