How can I find the selected item in a QTreeWidget?

28,836

Solution 1

Using the itemClicked() signal will miss any selection changes made using the keyboard. I'm assuming that's a bad thing in your case.

Solution 2

Dusty is almost correct. But the itemSelectionChanged signal will not tell you which item is selected.

QList<QTreeWidgetItem *> QTreeWidget::selectedItems() const

will give you the selected item(s).

So, connect a slot to the itemSelectionChanged signal, then call selectedItems() on the tree widget to get the selected item(s).

Solution 3

you can simply use this :

QString word = treeWidget->currentItem()->text(treeWidget->currentColumn());

to get your text in the variable word.

Solution 4

According to the documentation here it appears that you should connect the QTreeWidget itemSelectionChanged() signal to a slot in your class. That will tell you which QTreeWidgetItem was selected which is what I believe you want.

Share:
28,836
JuanDeLosMuertos
Author by

JuanDeLosMuertos

Software engineer

Updated on July 18, 2022

Comments

  • JuanDeLosMuertos
    JuanDeLosMuertos almost 2 years

    I have a class that inherits QTreeWidget. How can I find the currently selected row? Usually I connect signals to slots this way:

    connect(myButton, SIGNAL(triggered(bool)), this, SLOT(myClick()));
    

    However, I can't find anything similar for QTreeWidget->QTreeWidgetItem. The only way I found is to redefine the mousePressEvent of the QTreeWidget class like this:

    void MyQTreeWidget::mousePressEvent(QMouseEvent *e){
        QTreeView::mousePressEvent(e);
        const QModelIndex index = indexAt(e->pos());
        if (!index.isValid())
        {
        const Qt::KeyboardModifiers modifiers = QApplication::keyboardModifiers();
        if (!(modifiers & Qt::ShiftModifier) && !(modifiers & Qt::ControlModifier))
        clearSelection();
        }
     }
    

    I didn't try it yet. Is the only solution or is there any easier way?

  • stephen
    stephen over 15 years
    Yes, you are correct. It even says so in the documentation that I linked to. Nice catch.
  • JuanDeLosMuertos
    JuanDeLosMuertos over 15 years
    it's perfect, I only need to click on the QTreeWidget :)