Как переопределить узел, расширяющийся в QTreeWidget?

#qt #expand #qtreeview #qtreewidget

#qt #Развернуть #qtreeview #qtreewidget

Вопрос:

Насколько я понимаю qtreeview.cpp метод expand в QTreeView отвечает за расширение узлов. Например, он используется в методе expandOrCollapseItemAtPos. Я пытаюсь переопределить расширение узла в QTreeWidget:

 #include <QApplication>
#include <QWidget>
#include <QTreeWidget>
#include <QMessageBox>

class MyTree : public QTreeWidget
{
public:
    MyTree(QWidget *parent) : QTreeWidget(parent) {}
    expandItem(const QTreeWidgetItem *item) {
        QMessageBox msg;
        msg.setText("EXPAND ITEM!!");
        msg.exec();
        QTreeWidget::expandItem(item);
    }
    expand(const QModelIndex amp;index) {
        QMessageBox msg;
        msg.setText("EXPAND!!");
        msg.exec();
        QTreeWidget::expand(index);
    }
};

int main(int argc, char *argv[])
{
    QApplication a(argc, argv);

    QWidget *mainWidget = new QWidget();
    mainWidget->resize(200,100);

    MyTree *myTree = new MyTree(mainWidget);
    myTree->resize(200,100);

    QTreeWidgetItem *node, *leaf;
    node = new QTreeWidgetItem(myTree);
    node->setText(0,"node");
    leaf = new QTreeWidgetItem(node);
    leaf->setText(0,"leaf");

    mainWidget->show();
    return a.exec();
}
  

Но при расширении узла нет никакого окна сообщения. Я пытался прокомментировать QTreeWidget::expandItem (элемент); и QTreeWidget::expand(индекс); но расширение все еще работает.
Как переопределить узел, расширяющийся в QTreeWidget?

Ответ №1:

QTreeWidget::expand и QTreeWidget::expandItem не являются виртуальными методами. Таким образом, переопределение бесполезно. Я буду использовать механизм сигналов слотов с сигналами QTreeWidget::expanded / collapsed.

 connect(this, SIGNAL(expanded(QModelIndex)), this, SLOT(myExpand(QModelIndex)));
  

Ответ №2:

Это должно решить вашу проблему —

 connect(QTreeWidgetObject, SIGNAL(itemExpanded(QTreeWidgetItem*)), SLOT(slotItemExpanded(QTreeWidgetItem*)));
  

Комментарии:

1. Есть некоторые ошибки. Слот расширения элемента — QTreeWidget::expanded. И аргументом этого слота является QModelItems. Я обновил свой ответ.