解释:
1、封装内容:列表显示
2、Qt::UserRole:设置不同的值,以此区分多级目录项
函数定义:
void onTreeItemClicked(QTreeWidgetItem* item);void onTreeItemDoubleClicked(QTreeWidgetItem* item);void onTreeItemExpanded(QTreeWidgetItem* item);void onTreeItemCollapsed(QTreeWidgetItem* item); //缩放void initContact();
源代码:
void CCMainWindow::initContact() {//根项QTreeWidgetItem* rootItem = new QTreeWidgetItem;rootItem->setData(0, Qt::UserRole, 0); //根项设置为 0,子项为 1, 以示区分根项子项RootContactItem* rootWidget = new RootContactItem(true, ui.treeWidget);rootWidget->setText(RootContact_TEXT);ui.treeWidget->addTopLevelItem(rootItem); //添加顶级项ui.treeWidget->setItemWidget(rootItem, 0, rootWidget);//连接根项目录的信号与槽函数connect(ui.treeWidget, &QTreeWidget::itemClicked, this, &CCMainWindow::onTreeItemClicked);connect(ui.treeWidget, &QTreeWidget::itemDoubleClicked, this, &CCMainWindow::onTreeItemDoubleClicked);connect(ui.treeWidget, &QTreeWidget::itemExpanded, this, &CCMainWindow::onTreeItemExpanded);connect(ui.treeWidget, &QTreeWidget::itemCollapsed, this, &CCMainWindow::onTreeItemCollapsed); //折叠}void CCMainWindow::onTreeItemClicked(QTreeWidgetItem * item) {bool isRoot = !(item->data(0, Qt::UserRole).toBool()); //根项被设置为0,isRoot:trueif (isRoot) {item->setExpanded(!item->isExpanded());}}void CCMainWindow::onTreeItemDoubleClicked(QTreeWidgetItem * item) {bool isChild = item->data(0, Qt::UserRole).toBool();//子项被设置为1if (isChild) {qDebug() << QString::fromLocal8Bit("打开聊天窗口:") << item->data(0, Qt::UserRole + 1);}}void CCMainWindow::onTreeItemExpanded(QTreeWidgetItem * item) {bool isRoot = !(item->data(0, Qt::UserRole).toBool()); //根项被设置为0,isRoot:trueif (isRoot) {RootContactItem* rootWidget = dynamic_cast<RootContactItem*>(ui.treeWidget->itemWidget(item, 0));if (rootWidget) {rootWidget->setExpanded(true);}} }//折叠:collapsed void CCMainWindow::onTreeItemCollapsed(QTreeWidgetItem * item) {bool isRoot = !(item->data(0, Qt::UserRole).toBool()); //根项被设置为0,isRoot:trueif (isRoot) {//dynamic_cast:强制类型转换RootContactItem* rootWidget = dynamic_cast<RootContactItem*>(ui.treeWidget->itemWidget(item, 0));if (rootWidget) {rootWidget->setExpanded(false);}}}
RootContactItem(bool hasArrow = true, QWidget *parent = nullptr);