2011-06-30 16 views
2

My Desktop Qtアプリケーションには大きなスタイルシートが適用されています。これは、すべてのQWidgetの私が定義するオブジェクトや使用に適していますQtスタイルシートの謎

this->ApplyStyleSheet(":/qss/default.qss"); 

を:私が使用しているのQApplication派生クラスに適用されます。 (* .uiファイルを使用して)。

自分のQWidgetの1つを* .uiファイルで宣伝するとき、私の問題は、自分のQWidgetの派生クラスの1つに使用しています。私は私のカスタムQWidgetの派生クラスに要素を促進しに変更すると

QWidget#myWidget { 
    background: transparent; 
    background-image: url(:/images/bg_img.png); 
    background-repeat: repeat-x; 
} 

QMyDerivedClass#myWidget { 
    background: transparent; 
    background-image: url(:/images/bg_img.png); 
    background-repeat: repeat-x; 
} 

私のウィジェットはQWidgetの、は以下のを働いたと背景画像を変更しました

私はもはや私の背景イメージを見ません。明らかに私は何かが足りない。それは何ですか...あなたの誰かが知っていることを願っています。

+0

これらのタグはすべてQWidgetに関連しています。CSSをそのまま残してみましたか?QWidget#myWidget {? – Abhijith

+0

アプリケーションの実行時に背景イメージが表示されますか?派生クラスでどの関数を変更しましたか?そのヘッダーを与えてください – Raiv

+0

それは私の悪いです。カスタム派生クラスに "paintEvent"を追加しませんでした。 – JasonGenX

答えて

9

悪いです。同様の問題を抱えた人々が解決策を見つけることができるように投稿してください。

カスタムクラスに「paintEvent」を追加しませんでした。 (この場合、スタイルシートの順守を可能にします)。

void CustomWidget::paintEvent (QPaintEvent *) 
{ 
    QStyleOption opt; 
    opt.init (this); 
    QPainter p (this); 
    style()->drawPrimitive (QStyle::PE_Widget, &opt, &p, this); 
} 
+1

似たような問題を抱えている人には、既にそのウィジェットに初期化されたスタイルシートを持っていれば、次のコードが完璧に機能します。そうでない場合は、プログラムで設定する簡単な方法は、ウィジェットの初期化のどこかに以下を含めることです: this-> setStyleSheet( "QWidget {background-color:blue}"); style() - > drawPrimitiveコマンドでは何もしません。 – Flarex

関連する問題