2012-08-24 14 views
8

私が持っている:スタイルシートを持つ子供ではなくQtウィジェットをどのようにスタイルするのですか?

class Box : public QWidget 

、それは私がやってみました

this->setLayout(new QGridLayout(this)); 

があります

this->setStyleSheet("border-radius: 5px; " 
        "border: 1px solid black;" 
        "border: 2px groove gray;" 
        "background-color:blue;"); 

this->setStyleSheet("QGridLayout{" 
         "background-color:blue;" 
         "border-radius: 5px; " 
         "border: 1px solid black;" 
         "border: 2px groove gray;" 
        "}" 
        ); 

this->setObjectName(QString("Box")); 
this->setStyleSheet("QWidget#Box {" 
         "background-color:blue;" 
         "border-radius: 5px; " 
         "border: 1px solid black;" 
         "border: 2px groove gray;" 
        "}" 
        ); 

が、最初に追加された項目のみに影響し、他の2つは何もしないし。私は箱自体に丸みのある角とボーダー(行間の行を行う方法のボーナス)を持たせたい。

どのようにしてスタイルシートを子どもではなくBoxウィジェットに影響させることができますか?

答えて

9

QWidget#idName { 
    border: 1px solid grey; 
} 

または

Box { 
    border: 1px solid grey; 
} 

後者れます私の意見では、 ID名を使用する必要はありません。

これらは、これは、カスタムウィジェットと考えられ、したがって、カスタムペイントイベントを必要とされているのでかかわらず働いていなかった理由の主な問題点:Qt Stylesheet for custom widget

+6

ウィジェットがカスタムウィジェットであるため、しかし、 'paintEvent'関数が何もしない' QWidget'クラスの基本クラスを継承しているので、 'QFrame'から継承した場合、すでに' paintEvent'関数が動作しています。 – alexisdm

+0

@alexisdmありがとう知る – chacham15

5

通常のCSSと同様に、オブジェクトクラスとインスタンスを識別する必要があります。

QWidget#BoxName 
{ 
    border-radius: 5px; 
    border: 1px solid black; 
    border: 2px groove gray; 
} 

これは、ここで同じ答えです:私が使用している可能性がより正確にGet variable name of Qt Widget (for use in Stylesheet)?

box->setStyleSheet(QString::fromUtf8("QWidget#box\n" 
"{\n" 
" border-radius: 5px;\n" 
" border: 1px solid black;\n" 
" border: 2px groove gray;\n" 
"}\n" 
"")); 
+0

更新質問を参照してください。

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

これはから取られました – chacham15

+0

これはあなたがBoxのインスタンスに与えた名前です。コンストラクタ内で 'objectName()'を使用することができます。例:this-> setStyleSheet(sprintf( "QWidget#%s ..."%this-> objectName())) – Ben

+0

名前を取得する方法を理解しました。ワーキング。質問を参照してください。 – chacham15

関連する問題