How to support :pressed state of style sheet for custom widget ?



  • What i have :-
    I have a custom widget which extends QFrame (instead of QWidget as QFrame already has a working paintEvent implementation). I have overridden the mousePressed() and mouseReleased() to emit the pressed() released() and clicked() Signals. Everything upto this point is woring fine as expected.

    What i need :-
    This custom widget is having basic style sheet support and it supports the :hover state just fine.
    But the :pressed state is not working. I have already figured out that this is bcoz its not supported by QFrame/QLabel etc.
    I wish to know what do i need to do in order to support the :pressed state.
    Should i set some attribute / property on pressed and released OR anything else ?


  • Moderators

    AFAIK this it's not possible to use pseudo states (and sub-controls) with custom widgets (except the one which are supported by the base class).

    But you can set a custom dynamic property and check for it in the stylesheet:
    @
    void MyWidget::mousePressEvent(...)
    {
    this->setProperty("pressed", true);
    this->style()->polish(this);
    }
    void MyWidget::mouseReleaseEvent(...)
    {
    this->setProperty("pressed", false);
    this->style()->polish(this);
    }
    @

    in the stylesheet:
    @
    MyWidget[pressed="true"]
    {
    ...
    }
    @



  • Thanks raven,
    I was expecting a standard property or attribute which pertains to the state. But i guess there is not, This does the job :)


Log in to reply
 

Looks like your connection to Qt Forum was lost, please wait while we try to reconnect.