ケース 1: QWidget のサブクラスを Q_OBJECT で作成し、スタイルシートを設定します -- 効果はありません。
ケース 2: Q_OBJECT なしで QWidget のサブクラスを作成し、スタイルシートを設定 -- 期待どおりに動作
ケース 3: Q_OBJECT を使用して QLabel のサブクラスを作成し、スタイルシートを設定 -- 期待どおりに動作
この動作を理解する方法は?ケース1でスタイルシートを機能させることは可能ですか?
ケース 1: QWidget のサブクラスを Q_OBJECT で作成し、スタイルシートを設定します -- 効果はありません。
ケース 2: Q_OBJECT なしで QWidget のサブクラスを作成し、スタイルシートを設定 -- 期待どおりに動作
ケース 3: Q_OBJECT を使用して QLabel のサブクラスを作成し、スタイルシートを設定 -- 期待どおりに動作
この動作を理解する方法は?ケース1でスタイルシートを機能させることは可能ですか?
カスタム QWidget サブクラスでスタイルシートをサポートする場合は、次のコードを提供する必要があります: Qt コード:
void myclass::paintEvent(QPaintEvent *pe)
{
QStyleOption o;
o.initFrom(this);
QPainter p(this);
style()->drawPrimitive(
QStyle::PE_Widget, &o, &p, this);
};
wysota と Qt ヘルプの厚意によるものです。
Q_OBJECT を指定しない場合、クラスにはメタ データがないため、QWidget と見なされます。
なぜ機能しないのかわかりませんが、Werner Erasmus の回答のコードを Python に変換しました。次の "works for me"™</p>
def paintEvent(self, pe):
o = QStyleOption()
o.initFrom(self)
p = QPainter(self)
self.style().drawPrimitive(QStyle.PE_Widget, o, p, self)