QTQTreeView使用方法 QTreeView:用于显示树状结构数据,适用于树状结构数据的操作。一、初始化 利用QStandardlternModel来初始化数据,标准的基于项数据的数据模型类,每个项数据可以是任何数据类型。初始化modelQStandardItemModelmstandardItemModelnewQStandardItemModel();使用model设置QTreeView表头mstandardItemModelsetHorizontalHeaderLabels(QStringList(QStringLiteral(资源)));TreeView控件载入modelui。mtreeViewsetModel(mstandardItemModel);展开数据ui。mtreeViewexpandAll();二、节点添加数据 利用QStandardItem创建根节点与子节点的Item,并向内填充数据。数据类型可以为QString等字符,也可以是常规的变量类型。创建根节点,抽象Item,并没有实际数据QStandardItemitemRootmstandardItemModelinvisibleRootItem();创建并添加Item的第一个子节点QStandardItemitemCamnewQStandardItem(QStringLiteral(相机));itemRootappendRow(itemCam);向第一个子节点itemCam添加子节点数据QListQStandardItemcamList;camList。append(newQStandardItem(cam1));camList。append(newQStandardItem(cam2));camList。append(newQStandardItem(cam3));itemCamappendRows(camList);创建并添加Item的第二个子节点QStandardItemitemImgnewQStandardItem(QStringLiteral(图片));itemRootappendRow(itemImg);向第二个子节点itemImg添加子节点数据QListQStandardItemimgList;imgList。append(newQStandardItem(img1));imgList。append(newQStandardItem(img2));imgList。append(newQStandardItem(img3));itemImgappendRows(imgList); 显示如下: 三、QTreeView节点鼠标点击事件1。1鼠标单击事件响应类型 1、当我们将鼠标停靠在指定节点内并点击时,我们需要触发鼠标选中的item发生变化,此时会有QModelInex发生变化。 相关参数详解: 参数 功能 QModelIndex 返回item的row(),colmun()以及父节点 mtreeViewzselectionModel() 选中当前鼠标单击的TreeView的modelitem项 QitemModel::currentChanged 鼠标选择item事件响应 QItemSelectionModel::currentChanged 跟踪视图中的选定项 代码如下:鼠标左键单击槽函数voidonimagetreecurrentChanged(constQModelIndexcurrent,constQModelIndexprevious);槽函数连接connect(ui。mtreeViewselectionModel(),QitemModel::currentChanged,this,onimagetreecurrentChanged);槽函数QtDemos::onimagetreecurrentChanged(){你的操作:从索引index里面获得item指针,model是tree的数据model,这里item数据类型为QStandradItemModelQModelIndexindexcurrent。sibling(current。row(),0);获取当前item的子节点indexnote:子节点只有一行的情况下QStandardItemitemmTreeViewModelitemFromIndex(index);根据index获取当前itemif(item){处理代码intindexCurrentItemindex。row()获取item的行号QStringtextitemtext();获取item的文本mstandardItemModelitemFromIndex(index)text()通过index获取item文本}} 四、其他操作 1、节点设置checkBoxitemCamsetCheckable(true);itemImgsetCheckable(true); 2、节点添加图标 【note】:只能添加png,jpg等格式文件,无法添加。ico图标文件itemCamsetIcon(QIcon(C:UsersadminDesktopAlexnetStructure。png)); 3、节点不可编辑uimtreeViewsetEditTriggers(QAbstractItemView::NoEditTriggers); 完整代码: 4、右键菜单打开右键菜单属性uitreeViewsetContextMenuPolicy(Qt::CustomContextMenu);右键菜单menunewQMenu(uitreeView);menuaddAction(添加);menuaddAction(删除); 最终效果 五、完整代码QtDemos。hpragmaonceincludeQtWidgetsQMainWindowincludeuiQtDemos。hincludeQStandardItemModelincludeQMenuclassQtDemos:publicQMainWindow{QOBJECTpublic:QtDemos(QWidgetparentQNULLPTR);private:Ui::QtDemosClassui;privateslots:QTreeView鼠标左键选中子节点事件响应槽函数voidonmtreeViewcurrentchanged(constQModelIndexcurrent,constQModelIndexprevious);voidonmtreeViewMenuPopup(constQPointpos);};QtDemos。cppincludeQtDemos。hQtDemos::QtDemos(QWidgetparent):QMainWindow(parent){ui。setupUi(this);1。初始化modelQStandardItemModelmstandardItemModelnewQStandardItemModel();2。使用model设置QTreeView表头mstandardItemModelsetHorizontalHeaderLabels(QStringList(QStringLiteral(资源)));3。创建根节点,抽象Item,并没有实际数据QStandardItemitemRootmstandardItemModelinvisibleRootItem();4。创建并添加Item的第一个子节点QStandardItemitemCamnewQStandardItem(QStringLiteral(相机));itemRootappendRow(itemCam);5。向第一个子节点itemCam添加子节点数据QListQStandardItemcamList;camList。append(newQStandardItem(cam1));camList。append(newQStandardItem(cam2));camList。append(newQStandardItem(cam3));itemCamappendRows(camList);6。创建并添加Item的第二个子节点QStandardItemitemImgnewQStandardItem(QStringLiteral(图片));itemRootappendRow(itemImg);7。向第二个子节点itemImg添加子节点数据QListQStandardItemimgList;imgList。append(newQStandardItem(img1));imgList。append(newQStandardItem(img2));imgList。append(newQStandardItem(img3));itemImgappendRows(imgList);8。TreeView控件载入modelui。mtreeViewsetModel(mstandardItemModel);9。展开数据ui。mtreeViewexpandAll();槽函数connect(ui。mtreeViewselectionModel(),QItemSelectionModel::currentChanged,this,QtDemos::onmtreeViewcurrentchanged);connect(ui。mtreeView,QTreeView::customContextMenuRequested,this,QtDemos::onmtreeViewMenuPopup);其他操作节点设置checkBoxitemCamsetCheckable(true);itemImgsetCheckable(true);节点设置图标itemCamsetIcon(QIcon(C:UsersadminDesktopAlexnetStructure。png));只能添加png,jpg等格式文件,无法添加。ico图标文件节点不可编辑ui。mtreeViewsetEditTriggers(QAbstractItemView::NoEditTriggers);右键菜单ui。mtreeViewsetContextMenuPolicy(Qt::CustomContextMenu);}voidQtDemos::onmtreeViewcurrentchanged(constQModelIndexcurrent,constQModelIndexprevious){你的操作。。。QModelIndexindexcurrent。sibling(current。row(),0);子节点只有一行的情况下}voidQtDemos::onmtreeViewMenuPopup(constQPointpos){QMenumenunewQMenu(ui。mtreeView);menuaddAction(QStringLiteral(添加));menuaddAction(QStringLiteral(删除));menuexec(ui。mtreeViewmapToGlobal(pos));}