#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. Я обновил свой ответ.