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. Draw a PE_IndicatorBranch in a QLabel
Qt 6.11 is out! See what's new in the release blog

Draw a PE_IndicatorBranch in a QLabel

Scheduled Pinned Locked Moved Solved General and Desktop
20 Posts 2 Posters 5.2k 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.
  • O oberluz

    @mrjj thanks. I was able to get it to work if the QListWidget was the central widget in the QApplicaiton as per your example. However if I add it to a dock widget they fail to draw:

    #ifndef MAINWINDOW_H
    #define MAINWINDOW_H
    
    #include <QMainWindow>
    
    namespace Ui {
        class MainWindow;
    }
    
    class MainWindow : public QMainWindow
    {
        Q_OBJECT
    
    public:
        explicit MainWindow(QWidget *parent = 0);
        ~MainWindow();
    
        QWidget* createListWidget();
    
    private:
        Ui::MainWindow *ui;
    };
    
    #endif // MAINWINDOW_H
    
    #include "MainWindow.h"
    #include "ui_MainWindow.h"
    #include <QListWidget>
    #include <QLabel>
    #include <QPainter>
    #include <QHBoxLayout>
    #include <QApplication>
    #include <iostream>
    #include <QDockWidget>
    
    class NodeWidget : public QLabel
    {
    public:
        NodeWidget(QWidget *parent = NULL) :
            QLabel("", parent)
        {
        }
    
    private:
         void paintEvent(QPaintEvent *);
    };
    
    void NodeWidget::paintEvent(QPaintEvent *e)
    {
        QLabel::paintEvent(e);
        QPainter painter(this);
        QStyleOption option;
        option.initFrom(this);
        option.rect = rect();
        option.state = QStyle::State_Item | QStyle::State_Children;
        style()->drawPrimitive(QStyle::PE_IndicatorBranch, &option, &painter, this);
    }
    
    class RowWidget : public QWidget
    {
    public:
        RowWidget(const QString& text, QWidget *parent = NULL);
    };
    
    
    RowWidget::RowWidget(const QString &text, QWidget *parent) :
        QWidget(parent)
    {
        QHBoxLayout* layout = new QHBoxLayout(this);
        layout->setContentsMargins(0,0,0,0);
    
        layout->addWidget(new NodeWidget(this));
        layout->addWidget(new QLabel(text, this));
        layout->addWidget(new QLabel("text", this));
    
        setLayout(layout);
    }
    
    
    MainWindow::MainWindow(QWidget *parent) :
        QMainWindow(parent),
        ui(new Ui::MainWindow)
    {
        ui->setupUi(this);
        layout()->setContentsMargins(0,0,0,0);
    
        QString styleSheet("QDockWidget::title { font: 75 11pt \"ubuntu\"; text-align: left; background: darkgray; }");
    
        QDockWidget* m_dockWidget;
        m_dockWidget = new QDockWidget(" Dock Window", this);
        m_dockWidget->setObjectName(QString::fromUtf8("DockWidget"));
        QSizePolicy sizePolicy6(QSizePolicy::Minimum, QSizePolicy::Minimum);
        sizePolicy6.setHorizontalStretch(0);
        sizePolicy6.setVerticalStretch(0);
        sizePolicy6.setHeightForWidth(m_dockWidget->sizePolicy().hasHeightForWidth());
        m_dockWidget->setSizePolicy(sizePolicy6);
        m_dockWidget->setAllowedAreas(Qt::LeftDockWidgetArea|Qt::RightDockWidgetArea|Qt::TopDockWidgetArea|Qt::BottomDockWidgetArea);
    
        m_dockWidget->layout()->setContentsMargins(0,0,0,0);
        m_dockWidget->setStyleSheet(styleSheet);
    
        addDockWidget(Qt::BottomDockWidgetArea, m_dockWidget);
    
        QWidget* list = createListWidget();
        m_dockWidget->setWidget(list);
    
        {
            QWidget* list = createListWidget();
            setCentralWidget(list);
        }
    }
    
    MainWindow::~MainWindow()
    {
        delete ui;
    }
    
    QWidget *MainWindow::createListWidget()
    {
        QListWidget* list = new QListWidget(this);
        list->setAlternatingRowColors(true);
    
        RowWidget* widget = new RowWidget("one", list);
        QListWidgetItem* item = new QListWidgetItem(list);
        item->setSizeHint(widget->minimumSizeHint());
        list->addItem(item);
        list->setItemWidget(item, widget);
    
        widget = new RowWidget("two", list);
        item = new QListWidgetItem(list);
        item->setSizeHint(widget->minimumSizeHint());
        list->addItem(item);
        list->setItemWidget(item, widget);
    
        widget = new RowWidget("three", list);
        item = new QListWidgetItem(list);
        item->setSizeHint(widget->minimumSizeHint());
        list->addItem(item);
        list->setItemWidget(item, widget);
    
        return list;
    }
    

    0_1561451749908_dockwidget.png

    O Offline
    O Offline
    oberluz
    wrote on last edited by oberluz
    #8

    @oberluz said in Draw a PE_IndicatorBranch in a QLabel:

    drawPrimitive

    my bad: the style sheet is causing the issue. Can't see why that could cause it?

    1 Reply Last reply
    0
    • mrjjM Offline
      mrjjM Offline
      mrjj
      Lifetime Qt Champion
      wrote on last edited by
      #9

      Hi
      What does the stylesheet target?
      margins and such can affect lots of stuff if not
      target using names or concrete types as selectors

      O 1 Reply Last reply
      1
      • mrjjM mrjj

        Hi
        What does the stylesheet target?
        margins and such can affect lots of stuff if not
        target using names or concrete types as selectors

        O Offline
        O Offline
        oberluz
        wrote on last edited by
        #10

        @mrjj I only intended it to darken the dock window title bar:

        QString styleSheet("QDockWidget::title { font: 75 11pt \"ubuntu\"; text-align: left; background: darkgray; }");
        
        mrjjM 1 Reply Last reply
        0
        • O oberluz

          @mrjj I only intended it to darken the dock window title bar:

          QString styleSheet("QDockWidget::title { font: 75 11pt \"ubuntu\"; text-align: left; background: darkgray; }");
          
          mrjjM Offline
          mrjjM Offline
          mrjj
          Lifetime Qt Champion
          wrote on last edited by
          #11

          @oberluz
          so if you do use styleSheet it looks as you expect?
          you are right, im not sure either how that should affect NodeWidget

          O 1 Reply Last reply
          0
          • mrjjM mrjj

            @oberluz
            so if you do use styleSheet it looks as you expect?
            you are right, im not sure either how that should affect NodeWidget

            O Offline
            O Offline
            oberluz
            wrote on last edited by
            #12

            @mrjj yes, without the stylesheet its fine:

            0_1561455516847_without_style.png

            Is its possible I need to get the current style sheet, then somehow add the title, and then set it ? I'm thinking that by just setting it rather than modifying it I might be deleting something

            mrjjM 1 Reply Last reply
            1
            • O oberluz

              @mrjj yes, without the stylesheet its fine:

              0_1561455516847_without_style.png

              Is its possible I need to get the current style sheet, then somehow add the title, and then set it ? I'm thinking that by just setting it rather than modifying it I might be deleting something

              mrjjM Offline
              mrjjM Offline
              mrjj
              Lifetime Qt Champion
              wrote on last edited by
              #13

              @oberluz
              Hi
              Unless you manually set a stylesheet, its empty pr default.
              so if that is the ONLY stylesheet you set, i dont get it.

              O 1 Reply Last reply
              1
              • mrjjM mrjj

                @oberluz
                Hi
                Unless you manually set a stylesheet, its empty pr default.
                so if that is the ONLY stylesheet you set, i dont get it.

                O Offline
                O Offline
                oberluz
                wrote on last edited by
                #14

                @mrjj its the only one, the example I posted is complete

                mrjjM 1 Reply Last reply
                0
                • O oberluz

                  @mrjj its the only one, the example I posted is complete

                  mrjjM Offline
                  mrjjM Offline
                  mrjj
                  Lifetime Qt Champion
                  wrote on last edited by
                  #15

                  @oberluz
                  Sorry, i really cant guess.
                  It seems not very connected.
                  and should only affect Title

                  O 1 Reply Last reply
                  1
                  • mrjjM mrjj

                    @oberluz
                    Sorry, i really cant guess.
                    It seems not very connected.
                    and should only affect Title

                    O Offline
                    O Offline
                    oberluz
                    wrote on last edited by
                    #16

                    @mrjj Maybe a bug.. I might raise one with this example

                    mrjjM 1 Reply Last reply
                    0
                    • O oberluz

                      @mrjj Maybe a bug.. I might raise one with this example

                      mrjjM Offline
                      mrjjM Offline
                      mrjj
                      Lifetime Qt Champion
                      wrote on last edited by mrjj
                      #17

                      @oberluz
                      Could be.
                      Please make a small sample that can reproduce it.
                      Makes it far more likely we discover what it is. :)

                      O 1 Reply Last reply
                      0
                      • mrjjM mrjj

                        @oberluz
                        Could be.
                        Please make a small sample that can reproduce it.
                        Makes it far more likely we discover what it is. :)

                        O Offline
                        O Offline
                        oberluz
                        wrote on last edited by
                        #18

                        @mrjj will do and I'll run it under 5.13 before submititng

                        mrjjM 1 Reply Last reply
                        3
                        • O oberluz

                          @mrjj will do and I'll run it under 5.13 before submititng

                          mrjjM Offline
                          mrjjM Offline
                          mrjj
                          Lifetime Qt Champion
                          wrote on last edited by
                          #19

                          @oberluz
                          Super.
                          and please post link to bug here :)

                          O 1 Reply Last reply
                          1
                          • mrjjM mrjj

                            @oberluz
                            Super.
                            and please post link to bug here :)

                            O Offline
                            O Offline
                            oberluz
                            wrote on last edited by
                            #20

                            @mrjj https://bugreports.qt.io/browse/QTBUG-76947
                            as promised. reproduced it with 5.13.

                            1 Reply Last reply
                            4

                            • Login

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