1

背景が透明な QDockWidget がありますが、背景色または背景画像が浮いているときに変更したいと考えています。qt スタイル シートには、フローティングしているかどうかを示す疑似状態がないように見えるので、知りたいのですが、これは可能ですか?

4

2 に答える 2

3

解決策を見つけました。コードに次の接続を追加します。

    connect(knobDock, &QDockWidget::topLevelChanged, [&] (bool isFloating)
    {
        if (isFloating)
        {
            setAttribute(Qt::WA_TranslucentBackground, false);
            setAttribute(Qt::WA_NoSystemBackground, false); 
        }
    });

これにより、ドック ウィジェットは、ドックがフローティングしている場合はスタイルシートで指定されている背景を使用しますが、ドックされている場合は透明になります (つまり、メインウィンドウの背景が表示されます)。

于 2014-09-30T20:36:24.017 に答える
0

カスタム プロパティを使用してこれを行うことができます。

Dynamic Properties および Stylesheetsへのリンクを提供してくれた@phyattに感謝します。

カスタム クラスでカスタム プロパティを宣言するには、.cpp で次のように記述します。

setProperty("customPropertyName", 1);

または .h (使用される get/set アクセス メソッドも定義して実装することを忘れないでください):

Q_PROPERTY( int customPropertyName, READ getCustomPropertyName, WRITE setCustomPropertyName);

また、グローバル スタイルシート ファイルでは、カスタム プロパティの状態を次のように使用できます。

.YourClass[customPropertyName="1"] {
    background-color: transparent;
}

.YourClass[customPropertyName="2"] {
    background-color: black;
}

また、スタイルシートは自動的に再計算されないため、新しいプロパティ値を設定した後、オブジェクト インスタンスのスタイルシートをリロードする必要があります。

object->style()->unpolish(tstFrame);
object->style()->polish(tstFrame);
object->update();

また:

object->setStyleSheet("/* */");
于 2014-09-30T19:49:40.237 に答える