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

问题描述 投票:0回答:2

我理解qtreeview.cpp的方式QTreeView中的expand方法负责扩展节点。例如,它在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 &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(item);和QTreeWidget :: expand(index);但扩张仍在继续。如何在QTreeWidget中重新定义扩展节点?

qt expand qtreeview qtreewidget
2个回答
1
投票

QTreeWidget :: expand和QTreeWidget :: expandItem是非虚方法。所以重新定义没有用。我将使用插槽信号机制与QTreeWidget ::扩展/折叠信号。

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

0
投票

这应该可以解决你的问题 -

connect(QTreeWidgetObject, SIGNAL(itemExpanded(QTreeWidgetItem*)), SLOT(slotItemExpanded(QTreeWidgetItem*)));
最新问题
© www.soinside.com 2019 - 2025. All rights reserved.