1

カスタム ウィジェット (「QFrame」から派生) に、チェック可能/トグル可能なサポートを含めるにはどうすればよいですか? 私のウィジェットがユーザーによってチェック/トグルされたことをQtのスタイルシート(CSS)に認識させる方法は?

カスタム ウィジェットで使用する必要があるシグナルまたはプロパティはありますか?

ボタン ウィジェットで Qt の .ui ファイルを使用する必要があるため、(つまり) QPushButton を使用したくありません。

つまり、QPushButton を使用する場合 - 物事は簡単です:

QPushButton#btnName:focus:pressed { border-image: url(ThemesPathKey/menu-top-h.png);    }
QPushButton#btnName:checked {   border-image: url(ThemesPathKey/menu-top-h.png);    }
QPushButton#btnName:hover { border-image: url(ThemesPathKey/menu-top-h.png);    }

カスタム ボタン ウィジェットにも同様のものが必要です。

ありがとう。

4

2 に答える 2

2

カスタム ウィジェットにはhoverとを使用できますが、ボタンとチェック ボックスでのみサポートされています。 focuschecked

置き換えるcheckedには、カスタム プロパティを使用できます。

QPushButton#btnName[checked="true"] {   border-image: url(ThemesPathKey/menu-top-h.png);    }

ウィジェットがクリックされると、次のcheckedようなトグル プロパティが表示されます。

void mousePressEvent(QMouseEvent*) override
{
    bool checked = property("checked").toBool();
    setProperty("checked", !checked);
    style()->polish(this);
}
于 2014-11-13T14:06:12.737 に答える
1

ホバリングの場合、派生ウィジェットで同じアプローチを使用できます。

class MyClass : public QFrame
{
<...>
}

MyClass a;
a.setStyleSheet("MyClassa:hover{<...>}"); //this will work
a.setStyleSheet("MyClass#a:hover{<...>}"); //and this will work
a.setStyleSheet("QFrame:hover{<...>}"); //Even this will work, too

チェック/チェック解除はより複雑です。フレームにはチェック状態がないため、自分で実装する必要があります。

class MyClass : public QFrame
{
public:
    <...>
protected:
    void mousePressEvent(QMouseEvent * e) override
    {
        checked_ = !checked_;        
        if(checked)
            setStyleSheet("border:1px solid black;");
        else
            setStyleSheet("border:0px;"); 
    }
bool checked_;
}

またはこのようなもの

class MyClass : public QFrame
{
public:
    <...>
protected:
    void paintEvent(QPaintEvent * e) override
    {
        if(checked)
        {
        //draw something
        }
        else
        {
        //draw something else
        }
    }
    bool checked_;
}
于 2014-11-13T14:03:49.730 に答える