如何重新定义在QTreeWidget中展开的节点?

如何重新定义在QTreeWidget中展开的节点?,qt,expand,qtreeview,qtreewidget,Qt,Expand,Qtreeview,Qtreewidget,我对qtreeview.cpp的理解qtreeview中的展开方法负责展开节点。例如,它用于ExpandorCollapseitemapos方法。我尝试在QTreeWidget中重新定义节点扩展: #include <QApplication> #include <QWidget> #include <QTreeWidget> #include <QMessageBox> class MyTree : public QTreeWidget { p

我对qtreeview.cpp的理解qtreeview中的展开方法负责展开节点。例如,它用于ExpandorCollapseitemapos方法。我尝试在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 &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();
}
#包括
#包括
#包括
#包括
类MyTree:publicQTreeWidget
{
公众:
MyTree(QWidget*parent):QTreeWidget(parent){}
expandItem(常量QTreeWidgetItem*item){
QMessageBox消息;
msg.setText(“展开项!!”);
msg.exec();
QTreeWidget::expandItem(项目);
}
展开(常量QModelIndex和索引){
QMessageBox消息;
msg.setText(“展开!!”);
msg.exec();
QTreeWidget::展开(索引);
}
};
int main(int argc,char*argv[])
{
质量保证申请a(argc、argv);
QWidget*mainWidget=新的QWidget();
mainWidget->resize(200100);
MyTree*MyTree=newmytree(mainWidget);
myTree->resize(200100);
QTreeWidgetItem*节点,*叶;
节点=新的QTreeWidgetItem(myTree);
节点->设置文本(0,“节点”);
叶=新的QTreeWidgetItem(节点);
叶->setText(0,“叶”);
mainWidget->show();
返回a.exec();
}
但是当我展开一个节点时,没有任何消息框。我试图注释QTreeWidget::expandItem(item);和QTreeWidget::展开(索引);但扩张仍在发挥作用。 如何重新定义在QTreeWidget中展开的节点?

QTreeWidget::expand和QTreeWidget::expandItem是非虚拟方法。因此,重新定义是没有用的。我将对QTreeWidget::扩展/折叠信号使用插槽信号机制


这应该能解决你的问题-

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

有一些错误。项扩展的槽是QTreeWidget::expanded。这个插槽的参数是QModelItems。我已经更新了我的答案。
connect(QTreeWidgetObject, SIGNAL(itemExpanded(QTreeWidgetItem*)), SLOT(slotItemExpanded(QTreeWidgetItem*)));