首页 > 其他分享 >Qt QTableView和QStandardItemModel模糊搜索出现的文本及隐藏顶层节点

Qt QTableView和QStandardItemModel模糊搜索出现的文本及隐藏顶层节点

时间:2024-01-11 23:32:41浏览次数:27  
标签:Qt QStandardItemModel QTableView 查找 QTreeWidget new pTW pTV

前言

使用Qt进行开发时,树结构一般是使用QTreeWidget或使用QTreeView+QStandardItemModel结合。

查找

如果要进行查找树的所有项中,是否包含某文本,就需要遍历。

QTreeWidget查找

以下是使用QTreeWidget进行查找: 首先初始化一些树结构

    QTreeWidget* pTW = new QTreeWidget(this);
    setCentralWidget(pTW);


    for(int i = 0; i < 3; ++i)
    {
        QTreeWidgetItem* pTWI = new QTreeWidgetItem(QStringList() << QString("%1").arg(i));
        for(int j = 0; j < 3; ++j)
        {
            QTreeWidgetItem* pTWIChild = new QTreeWidgetItem(QStringList() << QString("%1_%2").arg(i).arg(j));
            pTWI->addChild(pTWIChild);
        }
        pTW->addTopLevelItem(pTWI);
    }
    pTW->expandAll();

显示如下: image.png 如果要查找包含2的item,代码如下:

    QTreeWidgetItemIterator it(pTW);
    while (*it) {
        QTreeWidgetItem* pItem = *it;
        if(pItem->text(0).contains("2"))
        {
            qDebug().noquote() << "查找到 : " << pItem->text(0);
        }
        ++it;
    }

image.png image.png

QStandardItemModel查找

但如果使用QTreeView视图显示树,查阅其帮助手册,里面并没有迭代器进行查找。但看QStandardItemModel手册,发现,其有findItems()方法。 首先初始化一些数据:

    QTreeView* pTV = new QTreeView();
    setCentralWidget(pTV);

    QStandardItemModel* pModel = new QStandardItemModel(pTV);
    pTV->setModel(pModel);
    for(int i = 0; i < 3; ++i)
    {
        QStandardItem* pItem = new QStandardItem(QString("%1").arg(i));
        for(int j = 0; j < 3; ++j)
        {
            QStandardItem* pItemTmp = new QStandardItem(QString("%1_%2").arg(i).arg(j));
            pItem->setChild(j, pItemTmp);
        }
        pModel->setItem(i, pItem);
    }
    pTV->expandAll();

显示如下: image.png 进行查找,主要是第二个参数的设置,设置为递归及包含查找,不然查找出问题。

    for(auto var :pModel->findItems("2", Qt::MatchRecursive | Qt::MatchContains))
    {
        qDebug().noquote() << "查找到 : " <<  var->text();
    }

image.png image.png

设置顶层Item隐藏

QStandardItemModel设置隐藏

pTV->setRowHidden(0, pTV->rootIndex(), true);

设置完后,节点0被隐藏 image.png

标签:Qt,QStandardItemModel,QTableView,查找,QTreeWidget,new,pTW,pTV
From: https://blog.51cto.com/u_16417016/9204608

相关文章

  • 【C++/Qt】QLCDNumber-电子时钟实战
    头文件:#ifndefDIGITALCLOCK_H#defineDIGITALCLOCK_H#include<QLCDNumber>classdigitalClock:publicQLCDNumber{Q_OBJECTpublic:digitalClock(QWidget*parent=0);protected:voidmousePressEvent(QMouseEvent*event);//鼠标点击事件void......
  • 【Qt之Quick模块】8. Quick基础、布局管理、布局管理器
    1.前言QtQuick编程,提供了多种布局方式。如,静态布局,可以使用组件的x、y属性进行设置,或者进行绑定。还可以使用锚anchors进行布局。此外,还可以使用定位器以及定位管理器为多组件进行布局。但使用布局管理器和锚会占用内存和实例化时间,若使用x、y、width、height等属性能完成需......
  • 全志T113开发板Qt远程调试
    1引言通常情况下工程师在调试Qt程序时,需要频繁制作镜像烧录到核心板来测试Qt程序是否完善,这样的操作既费时又费力。这时我们可以通过QtCreator设备功能,定义设备后,在x86_64虚拟机上交叉编译qt程序,将程序远程部署到arm64的机子上,然后远程调试,大大提高开发效率。2. 调试环境本文基于H......
  • 全志T113开发板Qt远程调试
    1引言 通常情况下工程师在调试Qt程序时,需要频繁制作镜像烧录到核心板来测试Qt程序是否完善,这样的操作既费时又费力。这时我们可以通过QtCreator设备功能,定义设备后,在x86_64虚拟机上交叉编译qt程序,将程序远程部署到arm64的机子上,然后远程调试,大大提高开发效率。  2. 调试......
  • QT:绘图
    QPainter能够实现绘制二维图形,适合用于绘制复杂度不高的固定图形,并且不能实现图项的选择、编辑、拖放、修改等交互功能对于需要绘制大量的、需要交互的图形,可以使用GraphicsViewItem QGraphicsEllipsetItem椭圆QGraphicsLineItem 直线QGraphicsPathItem......
  • C++和Qt面试题(精简版)
    C++面试题什么是c++?请简述它的优点和缺点c++是一种面向对象的编程语言,实现了继承、抽象、多态和封装等概念。**优点:**能够开发复杂的应用程序,提供了极大地灵活性,让开发者能够控制资源的使用和可用性,从而最大限度的提高性能。**缺点:**由于C++太过自由,导致指针对内存操作时可能造成内......
  • Qt中QItemEditorFactory的使用
    一般而言QItemEditorFactory是用于替换Qt中已有的数据类型的编辑器控件。因为如果是自定义类型的话,用它也比较复杂,还不如直接自定义一个新的QStyledItemDelegate。尽管如此,本文也给出一个自定义数据类型的例子,用于解释QItemEditorFactory的用法。本例子开发环境是VS2017和Qt5.9。......
  • Qt QProcess进程间调用及交互通信,完整示例
    1.概述使用Qt进行应用程序开发,主要是通过QProcess类用于启动外部程序并与其进行通信.1.1.运行进程要启动进程,需要运行的程序的名称和命令行参数作为参数传递给start()。参数以QStringList形式提供。start()方法原型:voidstart(constQString&program,constQStringList&a......
  • Qt 快速读取大文件最后一行内容
    0.前言有时候根据需求,需要读取文本的最后一行内容。如果是小文本,按照顺序读,然后取最后一行就Ok;但如果是大文本,即使是放到线程里跑,读取到最后一行也会有延迟,比较耗时。1.解决方案查看QFile帮助手册,其有boolseek(qint64pos);意思就是查找设备中的位置。成功时返回true;否......
  • MQTT服务器连接不上的问题
    问题描述环境:阿里云服务器Ubuntu22.04.3LTS,安装mosquitto后,在虚拟机端订阅消息出现报错(以前用阿里云Ubuntu20.04LTS的服务器装上就能用),以下服务器ip是我乱填的mosquitto_sub-t/iotstuff-h129.25.125.124-p1883Error:Connectionrefused解决办法查看服务器的端口占......