13

私は持っています:

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;"
                     "}"
                   );

ただし、最初の 1 つは追加された項目のみに影響し、他の 2 つは何もしません。ボックス自体に角と境界線を丸くしたい(行間の線の作成方法のボーナス)。

子ではなく Box ウィジェットに影響を与えるスタイルシートを取得するにはどうすればよいですか?

4

3 に答える 3

18

より正確に言うと、次のように使用できます。

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

また

Box {
    border: 1px solid grey;
}

私の意見では、ID 名を使用する必要がないため、後者の方が簡単です。

これらが機能しなかった主な問題は、これがカスタム ウィジェットと見なされ、カスタム ペイント イベントが必要なためです。

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

これは次のものから取られました:カスタム ウィジェットの Qt スタイルシート

于 2012-08-24T22:33:01.577 に答える
7

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

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

これはここと同じ答えです:Qtウィジェットの変数名を取得しますか(スタイルシートで使用するため)?

box->setStyleSheet(QString::fromUtf8("QWidget#box\n"
"{\n"
"    border-radius: 5px;\n"
"    border: 1px solid black;\n"
"    border: 2px groove gray;\n"
"}\n"
""));
于 2012-08-24T20:48:33.107 に答える