4

「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::drawControlQStyle::drawPrimitive長方形のコントロールを想定するのではなく、QPainterPath (またはより単純なプリミティブ) を尊重します。

スタイルシートから派生した色を使用してQtで所有者描画コントロールを作成する最良の方法は何ですか?

4

1 に答える 1

0

paintEvent で完全に描画し、スタイル シートを無視することを期待する方法はありません。しかし、もっと良い方法があるはずです。

Qt のウィジェットは長方形であり、他の形状を持つことはできません。ボックスモデルを見てください。したがって、他の方法は、使用しようとしている方法と同じくらいトリッキーになります。

QGraphicViewを使用する提案があります。

編集:

私は自分で試したことはありませんが、またはを使用して、希望する形状のボタンの上にマスクを設定することができます。その他の要素 (色など) は、スタイルシートを更新することで設定できます。カスタムペイントイベントを処理する必要がないため、これを機能させることができれば、どのような解決策を知っているかという問題ははるかに少なくなります。QBitmapQRegioncss

于 2013-01-30T16:53:55.203 に答える