3

Can anyone give me a hint on how to place a button in the header of QTreeWidget A minimal example is more than welcome?

m3trik
  • 333
  • 2
  • 13
Nick
  • 31
  • 1
  • 4

2 Answers2

3

For the person in the comments (and basically anyone else stopping by who might be helped by this), here is the translated python version of the code below:

from PySide2 import QtWidgets, QtCore

import sys



class Header(QtWidgets.QHeaderView):
    def __init__(self, orientation, parent=None):
        super(Header, self).__init__(orientation, parent)

        self.button = QtWidgets.QPushButton('Button text', self)



class TreeWidget(QtWidgets.QTreeWidget):
    def __init__(self, parent=None):
        super(TreeWidget, self).__init__(parent)

        item0 = QtWidgets.QTreeWidgetItem(["Item 0"])
        item1 = QtWidgets.QTreeWidgetItem(["Item 1"])

        self.addTopLevelItem(item0)
        self.addTopLevelItem(item1)
        self.createHeader()

    def createHeader(self):
        header = Header(QtCore.Qt.Horizontal, self)
        self.setHeader(header)



if __name__ == '__main__':
    app = QtWidgets.QApplication(sys.argv)

    w = TreeWidget()
    w.show()
    sys.exit(app.exec_())


#QTreeWidget header is an "stand alone" widget - QHeaderView, so you can set the custom implementation of it.
m3trik
  • 333
  • 2
  • 13
2
#include <QTreeWidget>
#include <QTreeWidgetItem>
#include <QHeaderView>
#include <QPushButton>


class Header
    : public QHeaderView
{
public:
    Header(QWidget* parent)
        : QHeaderView(Qt::Horizontal, parent)
        , m_button(new QPushButton("Button", this))
    {
    }

private:
    QPushButton* m_button;
};

class TreeWidget
    : public QTreeWidget
{
    Q_OBJECT
public:
    TreeWidget()
        : QTreeWidget(0)
    {
        QTreeWidgetItem* item0 = new QTreeWidgetItem(QStringList("Item 0"));
        QTreeWidgetItem* item1 = new QTreeWidgetItem(QStringList("Item 1"));
        addTopLevelItem(item0);
        addTopLevelItem(item1);
        createHeader();
    }

private:
    void createHeader()
    {
        m_header = new Header(this);
        setHeader(m_header);
    }

private:
    Header* m_header;

};

int main(int c, char** v)
{
    QApplication a(c, v);

    TreeWidget* tw = new TreeWidget();
    tw->show();

    return a.exec();
}


//QTreeWidget header is an "stand alone" widget - QHeaderView, so you can set the custom implementation of it.
milyaaf
  • 136
  • 1
  • 4
  • Thank you very much,but I still have a question. How to show the QPushButton* m_button in the Header,so we can see the button on UI ? – Nick Apr 19 '12 at 01:55
  • By this code its' already visible. Did you try the posted example ?. Try it please. – milyaaf Apr 19 '12 at 12:29
  • 1
    It's not imediately obvious to me but is that same possible in PyQt/PySide ? – Carel Jun 18 '15 at 13:19