「border-color」、「border-style」などのプロパティを取得するためのクラスまたはメソッドがQtにありますか...
これは、現在選択されているスタイル シートに基づいて独自の (派生した) コントロールを作成および描画するのに役立ちます。
例:
QPushButton {
border: 3px solid red;
background: blue;
margin: 5px;
padding: 10px;
}
コード:
class QPushButtonCircle : public QPushButton {
};
QPushButtonCircle は円形のボタンです。境界線も円形です。境界線は 3 ピクセル幅で、実線で赤く着色されている必要があります。背景は青色にする必要があります。
paintEvent で完全に描画し、スタイル シートを無視することを期待する方法はありません。しかし、もっと良い方法があるはずです。
最高のものは次のようなものです:
QCssStyle cssStyle = widget->...->getCssStyle();
QPen border = cssStyle->border(QCssStyle::Top);
QBrush background = cssStyle->background();
QMargins margins = cssStyle->margins();
QMargins padding = cssStyle->padding();
...
これにより、次のような独自のコントロールを描画できます。
QStylePainter p(this);
QRect r = rect();
r.adjust(cssStyle->margins().left(), ...);
p.setPen(cssStyle->border());
p.setBrush(cssStyle->brush());
p.drawEllipse(r);
r.adjust(cssStyle->padding().left(), ...);
p.drawText(r, ...);
より良い解決策は、のようなものを描画する方法ですがQStyle::drawControl
、QStyle::drawPrimitive
長方形のコントロールを想定するのではなく、QPainterPath (またはより単純なプリミティブ) を尊重します。
スタイルシートから派生した色を使用してQtで所有者描画コントロールを作成する最良の方法は何ですか?