Skip to content
  • Categories
  • Recent
  • Tags
  • Popular
  • Users
  • Groups
  • Search
  • Get Qt Extensions
  • Unsolved
Collapse
Brand Logo
  1. Home
  2. Qt Development
  3. General and Desktop
  4. Problem with QTreeWidget Stylesheet
Forum Updated to NodeBB v4.3 + New Features

Problem with QTreeWidget Stylesheet

Scheduled Pinned Locked Moved Solved General and Desktop
stylesheetqtreewidgetbackgroundtransparentselected item
14 Posts 4 Posters 17.7k Views 1 Watching
  • 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.
  • VRoninV Offline
    VRoninV Offline
    VRonin
    wrote on last edited by
    #3

    As from http://doc.qt.io/qt-5/stylesheet-examples.html#customizing-qtreeview you probably want to style QTreeView::item:selected:active and QTreeView::item:selected:!active

    really?? 26 views and no one know something about the stylesheet??

    a bit aggressive given the solution is clearly set out in the docs

    "La mort n'est rien, mais vivre vaincu et sans gloire, c'est mourir tous les jours"
    ~Napoleon Bonaparte

    On a crusade to banish setIndexWidget() from the holy land of Qt

    1 Reply Last reply
    3
    • QT-static-prgmQ Offline
      QT-static-prgmQ Offline
      QT-static-prgm
      wrote on last edited by
      #4

      @VRonin sry if it felt aggressive to you. Wasn't meant that way.

      So i changed it to this:

      QTreeWidget {
      	color:rgb(255,255,255);
      	background-color:rgba(0,0,0,0);
      	selection-background-color:transparent;
      }
      
      QTreeWidget::item:hover,QTreeWidget::item:hover:selected {
      	border:none;
      	border-radius:5px;
      	background-color:rgba(255,255,255,100);
      }
      
      QTreeWidget::item:selected, QTreeWidget::item:selected:active, QTreeWidget::item:selected:!active {
      	border:none;
      	background-color:rgba(255,255,255,0);
      }
      

      Result: everything like it was before but now the hover effect is not applied to selected items

      1 Reply Last reply
      0
      • A Offline
        A Offline
        Aviad Rotstein
        wrote on last edited by
        #5

        Try :

        QTreeView
        {
           show-decoration-selected: 0;
        }
        ``
        
        

        and maybe set your:

        QTreeView::branch{
            background-color: rgb(some_color);
            selection-background-color: rgb(some_color);
        }
        

        And yes, your reaction sounds very aggressive.

        Good luck,
        hope its help you

        QT-static-prgmQ 1 Reply Last reply
        0
        • A Aviad Rotstein

          Try :

          QTreeView
          {
             show-decoration-selected: 0;
          }
          ``
          
          

          and maybe set your:

          QTreeView::branch{
              background-color: rgb(some_color);
              selection-background-color: rgb(some_color);
          }
          

          And yes, your reaction sounds very aggressive.

          Good luck,
          hope its help you

          QT-static-prgmQ Offline
          QT-static-prgmQ Offline
          QT-static-prgm
          wrote on last edited by QT-static-prgm
          #6

          @Aviad-Rotstein said in Problem with QTreeWidget Stylesheet:

          QTreeView::branch{
          background-color: rgb(some_color);
          selection-background-color: rgb(some_color);
          }

          the last part changed the Color infront of the icon. So i set it to transparent as well. But the decoration does not change anything. So same problem with this updated code:

          QTreeWidget {
          	color:rgb(255,255,255);
          	background-color:rgba(0,0,0,0);
          	selection-background-color:transparent;
          	show-decoration-selected:0;
          }
          
          QTreeView {
          	show-decoration-selected:0;
          }
          
          QTreeWidget::item:hover,QTreeWidget::item:hover:selected:active {
          	border:none;
          	border-radius:5px;
          	background-color:rgba(255,255,255,100);
          }
          
          QTreeWidget::item:selected, QTreeWidget::item:selected:active, QTreeWidget::item:selected:!active {
          	background-color:rgba(255,255,255,0);
          }
          
          QTreeView::branch{
              background-color:transparent;
              selection-background-color:transparent;
          }
          

          where it makes no difference if i use QTreeView::branch or QTreeWidget::branch. Both do the chane (i tested with solid red Color before i changed to transparent)

          Btw changing it to this:
          QTreeWidget::item:selected, QTreeWidget::item:selected:active, QTreeWidget::item:selected:!active {
          background-color:rgb(255,0,0);
          }

          makes the whole item's background red (from the icon to the end of the line. ) while using transparent, only the text has the background that i cannot remove (as you can see on the picture)
          So maybe the item has a label as sub and there is the background set? But how could i access that? Same for the icon that turns into blue

          1 Reply Last reply
          0
          • A Offline
            A Offline
            Aviad Rotstein
            wrote on last edited by
            #7

            OK. You can try style:

            QTreeView::item {
                background-color: none;
            }
            QTreeView::item:selected {
                background-color: none;
            }
            

            And set item delegate, by subleasing QItemDelegate and re-implement the paint function, something like this:

            class MyItemDelegate : public QItemDelegate
            {
             public:
            void paint ( QPainter * painter, const QStyleOptionViewItem & oStyleOption, const QModelIndex & index ) const
            {
                    QStyleOptionViewItem oStyleOpt = oStyleOption;
                    
                    if(oStyleOpt.state & QStyle::State_Selected){
                              oStyleOpt.state ^= QStyle::State_Selected;
                              painter->fillRect(oStyleOpt.rect,  rgb(some_color));
                    }
                    // Paint
                   QItemDelegate::paint(painter, oStyleOpt, index);
            }
            }
            
            ........
            MyItemDelegate oItemDelegate;
            myTree->setItemDelegate(oItemDelegate);
            
            

            Its work for me...
            Good luck

            1 Reply Last reply
            0
            • QT-static-prgmQ Offline
              QT-static-prgmQ Offline
              QT-static-prgm
              wrote on last edited by QT-static-prgm
              #8

              @Aviad-Rotstein not sure what you mean with that item delegate?

              Should i make my own class of QTreeWidgetItem and reimplement the paint function the way you made for the delegate??
              (my code can be found under the links above)

              1 Reply Last reply
              0
              • A Offline
                A Offline
                Aviad Rotstein
                wrote on last edited by
                #9

                No. As in the given example code, you just need to make your own QItemDelegate,
                and then set your tree item delegate.
                As said at the documentation: "This is useful if you want complete control over the editing and display of items."

                1 Reply Last reply
                0
                • QT-static-prgmQ Offline
                  QT-static-prgmQ Offline
                  QT-static-prgm
                  wrote on last edited by QT-static-prgm
                  #10

                  @Aviad-Rotstein As you can see the blue hue from the icons is gone :D
                  But there is still this stupid surrounding around the text. Again this is ONLY when the focus is on that window.

                  I removed the painter->fillRect(oStyleOpt.rect, rgb(some_color)); line becuase it added a solid color (see the 2nd picture) and even an qrgba did not work.

                  So any ideas how to remove that text surrounding??

                  Maybe something else is easier. Since i never want the window to become the focus (to make the game to continue play music,..) is there maybe a way to interact with the window but do not have focus?

                  ah and btw the hover effect does not work anymore. Any ideas how to fix that??

                  ==EDIT==

                  void paint(QPainter * painter, const QStyleOptionViewItem & oStyleOption, const QModelIndex & index) const
                  	{
                  		QStyleOptionViewItem oStyleOpt = oStyleOption;
                  
                  		if (oStyleOpt.state & QStyle::State_Selected) {
                  			oStyleOpt.state ^= QStyle::State_Selected;
                  		}
                  
                  		if (oStyleOpt.state & QStyle::State_HasFocus) {
                  			oStyleOpt.state ^= QStyle::State_HasFocus;
                  		}
                  		
                  		// Paint
                  		QItemDelegate::paint(painter, oStyleOpt, index);
                  	}
                  

                  that removed the surrounding. But the hover is still gone

                  J.HilkJ 1 Reply Last reply
                  0
                  • QT-static-prgmQ QT-static-prgm

                    @Aviad-Rotstein As you can see the blue hue from the icons is gone :D
                    But there is still this stupid surrounding around the text. Again this is ONLY when the focus is on that window.

                    I removed the painter->fillRect(oStyleOpt.rect, rgb(some_color)); line becuase it added a solid color (see the 2nd picture) and even an qrgba did not work.

                    So any ideas how to remove that text surrounding??

                    Maybe something else is easier. Since i never want the window to become the focus (to make the game to continue play music,..) is there maybe a way to interact with the window but do not have focus?

                    ah and btw the hover effect does not work anymore. Any ideas how to fix that??

                    ==EDIT==

                    void paint(QPainter * painter, const QStyleOptionViewItem & oStyleOption, const QModelIndex & index) const
                    	{
                    		QStyleOptionViewItem oStyleOpt = oStyleOption;
                    
                    		if (oStyleOpt.state & QStyle::State_Selected) {
                    			oStyleOpt.state ^= QStyle::State_Selected;
                    		}
                    
                    		if (oStyleOpt.state & QStyle::State_HasFocus) {
                    			oStyleOpt.state ^= QStyle::State_HasFocus;
                    		}
                    		
                    		// Paint
                    		QItemDelegate::paint(painter, oStyleOpt, index);
                    	}
                    

                    that removed the surrounding. But the hover is still gone

                    J.HilkJ Offline
                    J.HilkJ Offline
                    J.Hilk
                    Moderators
                    wrote on last edited by
                    #11

                    @QT-static-prgm

                    mmh have you tried:

                    setFocusPolicy(Qt::NoFocus);
                    

                    it may help in your situation.


                    Be aware of the Qt Code of Conduct, when posting : https://forum.qt.io/topic/113070/qt-code-of-conduct


                    Q: What's that?
                    A: It's blue light.
                    Q: What does it do?
                    A: It turns blue.

                    1 Reply Last reply
                    0
                    • A Offline
                      A Offline
                      Aviad Rotstein
                      wrote on last edited by
                      #12

                      If you still go with the item delegate solution, you can add color for hovering items, something like:

                      if(oStyleOpt.state & QStyle::State_MouseOver){
                              painter->fillRect(oStyleOpt.rect, m_oHoverColor);
                      }
                      

                      And set the hover text color by the style sheet.
                      (of course, I hope the setFocusPolicy(Qt::NoFocus) solution will do the work...).

                      1 Reply Last reply
                      0
                      • QT-static-prgmQ Offline
                        QT-static-prgmQ Offline
                        QT-static-prgm
                        wrote on last edited by
                        #13

                        @J-Hilk @Aviad-Rotstein

                        i tested setFocusPolicy(Qt::NoFocus); and it works fine for the surrounding bug. But it does not fix the blue icon. Have you an idea how to get that fixed?? I would prefere this policy method because i want to give users the ability to adjust the style of of my plugin. And using the delegate method works, but would limit that option.

                        1 Reply Last reply
                        0
                        • QT-static-prgmQ Offline
                          QT-static-prgmQ Offline
                          QT-static-prgm
                          wrote on last edited by
                          #14

                          I was always searching at the wrong place.

                          The blue hue wasn't a problem of the style, it was a problem of the icon. Here is the solution:

                          for all icons

                          m_clientIcon.normal.addFile("plugins\\qtTsOverlay\\client.png");
                          

                          add this

                          m_clientIcon.normal.addFile("plugins\\qtTsOverlay\\client.png", QSize(), QIcon::Selected);
                          
                          1 Reply Last reply
                          0

                          • Login

                          • Login or register to search.
                          • First post
                            Last post
                          0
                          • Categories
                          • Recent
                          • Tags
                          • Popular
                          • Users
                          • Groups
                          • Search
                          • Get Qt Extensions
                          • Unsolved