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.8k 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.
  • A Offline
    A Offline
    Aviad Rotstein
    wrote on 19 Mar 2017, 09:29 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

    Q 1 Reply Last reply 19 Mar 2017, 13:50
    0
    • A Aviad Rotstein
      19 Mar 2017, 09:29

      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

      Q Offline
      Q Offline
      QT-static-prgm
      wrote on 19 Mar 2017, 13:50 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 19 Mar 2017, 16:12 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
        • Q Offline
          Q Offline
          QT-static-prgm
          wrote on 20 Mar 2017, 12:22 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 20 Mar 2017, 14:36 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
            • Q Offline
              Q Offline
              QT-static-prgm
              wrote on 22 Mar 2017, 13:59 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 1 Reply Last reply 22 Mar 2017, 14:18
              0
              • Q QT-static-prgm
                22 Mar 2017, 13:59

                @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 Offline
                J Offline
                J.Hilk
                Moderators
                wrote on 22 Mar 2017, 14:18 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 23 Mar 2017, 08:09 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
                  • Q Offline
                    Q Offline
                    QT-static-prgm
                    wrote on 23 Mar 2017, 13:53 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
                    • Q Offline
                      Q Offline
                      QT-static-prgm
                      wrote on 26 Mar 2017, 11:32 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

                      14/14

                      26 Mar 2017, 11:32

                      • Login

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