首页 > 其他分享 >Qt QTreeView 常见节点操作

Qt QTreeView 常见节点操作

时间:2024-06-21 19:22:02浏览次数:13  
标签:Qt QTreeView item ui new model treeView 节点 QStandardItem

QTreeView作为项目最经常使用的空间,常用接口和操作必须熟悉熟悉在熟悉!!!

1、节点遍历

 1 void ParamSettingDlg::GetNode()
 2 {
 3     for(int i = 0;i < model->rowCount() ;i++)
 4     {
 5         QStandardItem *item = model->item(i);
 6  
 7         qDebug() <<"item = " << item->text();
 8         GetItem(model->item(i) );
 9     }
10 }
11  
12 //GetItem 为递归函数,这样可以遍历到所有的节点
13  
14 void ParamSettingDlg::GetItem(QStandardItem *item)
15 {
16     Q_ASSERT(item);
17     if(item->hasChildren())
18     {
19         for(int i = 0;i < item->rowCount() ;i++)
20         {
21             QStandardItem * childitem = item->child(i);
22             qDebug() << "childitem = " << childitem->text();
23             GetItem(childitem);
24         }
25     }
26 }

2、设置当前选中项

接口setCurrentIndex

 1 for(int i = 0;i < standardModel_down->rowCount() ;i++)
 2 {
 3      QStandardItem *item = standardModel_down->item(i);
 4      Q_ASSERT(item);
 5      if(item->hasChildren())
 6      {
 7          for(int i = 0;i < item->rowCount() ;i++)
 8          {
 9              QStandardItem * childitem = item->child(i);
10              qDebug() << "childitem = " << childitem->text();
11              if(childitem->text() == fileName1)
12              {
13                  ui->treeView_down->setCurrentIndex(childitem->index());
14              }
15          }
16      }
17      qDebug() <<"item = " << item->text();
18  }

3、树节点自定义样式

使用接口setIndexWidget,其实QTableWidget的setCellWidget借口内部也是调用 setIndexWidget。如下:

1 QStandardItem *children = new QStandardItem();
2 QStandardItem *parent = model->item(r,c);
3 parent->appendRow(children);
4  
5 QModelIndex index = model->indexFromItem(children);
6 ui->treeView->setIndexWidget(index,myLabel);

示例

 1 Widget::Widget(QWidget *parent) : QWidget(parent), ui(new Ui::Widget)
 2 {
 3     ui->setupUi(this);
 4  
 5     QStandardItemModel* model = new QStandardItemModel();
 6     ui->tableView->setModel(model);
 7     ui->tableView->setFocusPolicy(Qt::NoFocus); //去掉选中单元格时的虚框
 8  
 9     model->setHorizontalHeaderLabels({"姓名", "年龄", "性别"});
10     model->setItem(0, 0, new QStandardItem("张三"));
11     model->setItem(0, 1, new QStandardItem("3"));
12  
13     QComboBox* cmb = new QComboBox();
14     cmb->addItems({"男", "女"});
15     ui->tableView->setIndexWidget(model->index(0, 2), cmb);
16  
17     model->setItem(1, 0, new QStandardItem("李四"));
18     model->setItem(1, 1, new QStandardItem("5"));
19  
20     cmb = new QComboBox();
21     cmb->addItems({"男", "女"});
22     ui->tableView->setIndexWidget(model->index(1, 2), cmb);
23 }

4、数据检索

借助代理类QSortFilterProxyModel

 1 m_model = new QStandardItemModel(ui->treeView);//模型
 2 m_pFilterModel = new QSortFilterProxyModel(ui->treeView);//过滤模型
 3  
 4 m_pFilterModel->setSourceModel(m_model);
 5 m_pFilterModel->setFilterCaseSensitivity(Qt::CaseInsensitive);  //大小写不敏感
 6 m_pFilterModel->setAutoAcceptChildRows(true);                   //父项满足时不过滤子项
 7 m_pFilterModel->setRecursiveFilteringEnabled(true);             //递归匹配满足的子节点,父类可见
 8 //指定初始化过滤列
 9 m_pFilterModel->setFilterKeyColumn(0);
10 ui->treeView->setModel(m_pFilterModel);

5、获取当前选中项
  通过QTreeView函数 currentIndex ()可以获取当前选中条目的QModelIndex,QModelIndex可以看做是QStandardItem的数据封装,知道 QModelIndex就可以知道QStandardItem,通过QStandardItemModel的 itemFromIndex 函数即可得到QModelIndex对应的QStandardItem。
如:

1 QStandardItemModel*   model  =   static_cast< QStandardItemModel*>( ui-> treeView-> model());
2 QModelIndex   currentIndex  =   ui-> treeView-> currentIndex();
3 QStandardItem*   currentItem  =   model-> itemFromIndex( currentIndex );

 

标签:Qt,QTreeView,item,ui,new,model,treeView,节点,QStandardItem
From: https://www.cnblogs.com/ybqjymy/p/18261233

相关文章

  • Qt 文件模型(QFileSystemModel)详细介绍
    一.定义Qt提供了QFileSystemModel类,用于在Qt应用程序中展示文件系统的数据。QFileSystemModel类是QAbstractItemModel的子类,可以方便地将文件系统的文件和文件夹结构作为数据模型,供Qt的视图类(比如QTreeView、QListView等)使用。二.功能设置根路径:使用setRootPath()方法设置......
  • 2023年天津大学图像工程课程设计 基于 OpenCV 、 Qt 库的图像处理软件+源代码+文档说
    文章目录源码下载地址项目介绍项目功能界面预览项目备注源码下载地址源码下载地址点击这里下载代码项目介绍图像工程课程设计基于OpenCV、Qt库实现的图像处理软件大学编程作业(TUST天津科技大学2023年)图像工程课程设计基于OpenCV、Qt库实现的图像处......
  • jquery 节点
    1..each().each()方法用于遍历jQuery对象集合中的每个元素。$(selector).each(function(index,element){//`this`isthecurrentDOMelementconsole.log(index,element);});2..find().find()方法用于在当前集合的每个元素的子元素中查找匹配的元素。......
  • Qt QTableView插入控件,qss设计
    环境Qt5.4.2功能QtQTableView插入控件,qss设计源码1.mainwindow.hclassMyComboBox;classMyDoubleSpinBox;classMainWindow:publicQMainWindow{Q_OBJECTpublic:explicitMainWindow(QWidget*parent=0);~MainWindow();private:Ui:......
  • Qt widget 鼠标拖拽,分离新窗口
    环境Qt5.4.2功能鼠标拖拽widget,分离出新的窗口,鼠标关闭窗口后,widget恢复之前的位置源码1.mainWindow.hclassMainWindow:publicQMainWindow{private:QWidget*ObjWidget;QWidget*Widget1;QWidget*Widget2;QWidget*Widget3;QWid......
  • QT/QMessageBox/QTimerEvent/使用定时器制作一个闹钟
    1.使用定时器制作一个闹钟代码:widget.cpp:#include"widget.h"#include"ui_widget.h"Widget::Widget(QWidget*parent):QWidget(parent),ui(newUi::Widget),speecher(newQTextToSpeech(this))//给语音对象申请空间{ui->setupUi(this);......
  • 基于python-深度学习的混凝土马路和泥地马路识别-含数据集+pyqt界面
    代码下载:https://download.csdn.net/download/qq_34904125/89434765本代码是基于pythonpytorch环境安装的。下载本代码后,有个requirement.txt文本,里面介绍了如何安装环境,环境需要自行配置。或可直接参考下面博文进行环境安装。深度学习环境安装教程-anaconda-python-pyto......
  • 基于python-CNN卷积神经网络的鱼类识别-含数据集+pyqt界面
    代码下载地址:https://download.csdn.net/download/qq_34904125/89434763本代码是基于pythonpytorch环境安装的。下载本代码后,有个requirement.txt文本,里面介绍了如何安装环境,环境需要自行配置。或可直接参考下面博文进行环境安装。深度学习环境安装教程-anaconda-python-......
  • qt开发-03——信号与槽
    信号与槽(Signal&Slot)是Qt编程的基础,也是Qt的一大创新。因为有了信号与槽的编程机制,在Qt中处理界面各个组件的交互操作时变得更加直观和简单。信号(Signal)就是在特定情况下被发射的事件,例如PushButton最常见的信号就是鼠标单击时发射的clicked()信号,一个ComboBox......
  • qt开发-05_QPushButton
    按钮是最常用的控件;如果找不到文件可以这样:选择这个复制文件的路径,粘贴就可以了。在qt中新建一个项目,并且打开ui界面添加一个按钮;右键这个按钮可以有很多功能:先是这个转到槽,这个就是给按钮的动作添加效果的功能:这里有很多类的槽方法。都是源于他继承的父类。我们选择......