16

ケース 1: QWidget のサブクラスを Q_OBJECT で作成し、スタイルシートを設定します -- 効果はありません。

ケース 2: Q_OBJECT なしで QWidget のサブクラスを作成し、スタイルシートを設定 -- 期待どおりに動作

ケース 3: Q_OBJECT を使用して QLabel のサブクラスを作成し、スタイルシートを設定 -- 期待どおりに動作

この動作を理解する方法は?ケース1でスタイルシートを機能させることは可能ですか?

4

2 に答える 2

26

カスタム 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 と見なされます。

于 2013-08-20T20:45:41.100 に答える
3

なぜ機能しないのかわかりませんが、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)
于 2015-10-01T13:57:33.550 に答える