Qt Forum

    • Login
    • Search
    • Categories
    • Recent
    • Tags
    • Popular
    • Users
    • Groups
    • Search
    • Unsolved

    Update: Forum Guidelines & Code of Conduct

    Qt CSS :!hover seems to override defaults

    General and Desktop
    styles styling css hover negation stylesheet
    1
    1
    1287
    Loading More Posts
    • Oldest to Newest
    • Newest to Oldest
    • Most Votes
    Reply
    • Reply as topic
    Log in to reply
    This topic has been deleted. Only users with topic management privileges can see it.
    • H
      Huulivoide last edited by Huulivoide

      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.

      CssTest.pro:

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

      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; }");
          mainLayout->addWidget(redLabel);
      
          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; }");
          mainLayout->addWidget(blueLabel);
      
          QWidget *w = new QWidget();
          w->setLayout(mainLayout);
          w->setWindowTitle("Css negation");
      
          w->show();
          return app.exec();
      }
      
      1 Reply Last reply Reply Quote 0
      • First post
        Last post