【接口封装】——18、添加目录项列表响应
解释:
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:true if (isRoot) { item->setExpanded(!item->isExpanded()); } } void CCMainWindow::onTreeItemDoubleClicked(QTreeWidgetItem * item) { bool isChild = item->data(0, Qt::UserRole).toBool();//子项被设置为1 if (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:true if (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:true if (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);