qt - 如何重新定义在 QTreeWidget 中扩展的节点?
问题描述
我理解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 中扩展的节点?
解决方案
QTreeWidget::expand和QTreeWidget::expandItem是非虚拟方法。所以重新定义是没有用的。我将使用带有QTreeWidget::expanded/collapsed信号的槽信号机制。
connect(this, SIGNAL(expanded(QModelIndex)), this, SLOT(myExpand(QModelIndex)));
推荐阅读
- vue.js - 如何在 2 个 v-for 循环中使用 $index 值创建变量?
- javascript - 使用 Rails 6 和 Bootstrap 4 在 FullCalendar 中使用模态创建新事件
- postgresql - PostreSQL 分区表在大型数据集上运行速度快吗?
- python - 我不断收到错误“没有名为 tkinter 的模块”基于 GUI 的加权/平均成绩计算器程序
- swift - SwiftUI 已发布更新不刷新
- xcode - 使用 Apple 的 Create ML 算法
- r - 在R中对数据框进行子集化后保留变量“名称”和“variable.labels”属性?
- python - 整数的基本加法不会在 Sublime Text 3 中打印?
- java - java.text.MessageFormat 增加 BigDecimal / Number 的小数位精度
- multithreading - 线程之间的内存栅栏/屏障如何与其他线程中的栅栏/屏障交互?