Important: Please read the Qt Code of Conduct -

Qt CSS :!hover seems to override defaults

  • Qt version: 5.4.2

    I am trying to style certain elements of my application with the CSS support.
    I want the elements to look "normal" when they are active (:focus), but have
    different styling when they are inactive . For this I need to use the :!focus selector,
    but it results in the normal/default style not being applied to the widget when
    focus is gained, instead the :!focus rules still persist. Adding another rule :focus
    does override the :!focus, but I want to use the system's style's default instead
    of my own values.

    The small app below demonstrates problem with Qlabels and :!hover, which has
    the same problem as the :!focus selector.

    QT += core gui widgets
    SOURCES += CssTest.cpp


    #include <QApplication>
    #include <QLabel>
    #include <QVBoxLayout>
    int main(int argc, char* argv[])
        QApplication app(argc, argv);
        QVBoxLayout *mainLayout = new QVBoxLayout;
        QLabel* redLabel = new QLabel("Red when mouse does not hover over this,\n"
                                      "but should turn back to default color (black)\n"
                                      "when mouse hovers over this text.");
        redLabel->setStyleSheet("QLabel:!hover { color: red; }");
        QLabel* blueLabel = new QLabel("Black when mouse does not hover over this,\n"
                                       "but should turn to blue when the mouse hovers\n"
                                       "over this text.");
        blueLabel->setStyleSheet("QLabel:hover { color: blue; }");
        QWidget *w = new QWidget();
        w->setWindowTitle("Css negation");
        return app.exec();