首页 > 其他分享 >QStandardItemModel遍历查找搜索关键字

QStandardItemModel遍历查找搜索关键字

时间:2024-05-16 21:10:08浏览次数:20  
标签:遍历 const Qt QStandardItemModel 关键字 int 查找 model

(1)findItems查找内容筛选项,只能查找显示的文字中是否包含该文字,但是
 QList<QStandardItem*> findItems(const QString &text,
                                    Qt::MatchFlags flags = Qt::MatchExactly,
                                    int column = 0) const;
(2)match可以匹配的范围更广一些,不仅可以匹配显示内容,还可以匹配DisplayRole ,还可以查找CheckStateRole ,也就是勾选上的选项,不过目前测试QTreeView只能搜索第一级节点,子节点勾选上的无法匹配;即使Qt::MatchFlags设置成递归MatchRecursive也无法遍历子节点
enum ItemDataRole {
        DisplayRole = 0,
        DecorationRole = 1,
        EditRole = 2,
        ToolTipRole = 3,
        StatusTipRole = 4,
        WhatsThisRole = 5,
        // Metadata
        FontRole = 6,
        TextAlignmentRole = 7,
        BackgroundColorRole = 8,
        BackgroundRole = 8,
        TextColorRole = 9,
        ForegroundRole = 9,
        CheckStateRole = 10,
        // Accessibility
        AccessibleTextRole = 11,
        AccessibleDescriptionRole = 12,
        // More general purpose
        SizeHintRole = 13,
        InitialSortOrderRole = 14,
        // Internal UiLib roles. Start worrying when public roles go that high.
        DisplayPropertyRole = 27,
        DecorationPropertyRole = 28,
        ToolTipPropertyRole = 29,
        StatusTipPropertyRole = 30,
        WhatsThisPropertyRole = 31,
        // Reserved
        UserRole = 0x0100
    };

 

 Q_INVOKABLE virtual QModelIndexList match(const QModelIndex &start, int role,
                                              const QVariant &value, int hits = 1,
                                              Qt::MatchFlags flags =
                                              Qt::MatchFlags(Qt::MatchStartsWith|Qt::MatchWrap)) const;
QModelIndexList listindex = m_model->match(m_model->index(0,0), Qt::CheckStateRole, Qt::Checked, 1, Qt::MatchWrap | Qt::MatchRecursive);
    listindex=    m_model->match(m_model->index(0, 0), Qt::DisplayRole, "1", 1, Qt::MatchContains | Qt::MatchRecursive);

(3)采用循环递归遍历的方式查找

int rootRowCount = m_model->rowCount();
    for (int i = 0; i < rootRowCount; i++)
    {
        QModelIndex rootIndex = m_model->index(i, 0);
        RecursiveFindCheckedVideo(rootIndex, mapSelectVideo);
    }

递归函数

void RecursiveFindCheckedVideo(QModelIndex& parent, QMap<QString, QVariantMap>& mapSelectFile)
{
    if (parent.isValid())
    {
        int rowCount = m_model->rowCount(parent);
        for (int i = 0; i < rowCount; ++i)
        {
            QModelIndex childIndex = m_model->index(i, 0, parent);
            QStandardItem* pItem = m_model->itemFromIndex(childIndex);
            if (pItem)
            {
                QVariantMap info = pItem->data().toMap();
                if (info.value("type") == "2")//视频文件
                {
                    mapSelectFile.insert(info.value("location").toString(), info);
                }
                else
                {
                    RecursiveFindCheckedVideo(childIndex, mapSelectFile); // 递归遍历子项
                }
            }

        }
    }
}

 

标签:遍历,const,Qt,QStandardItemModel,关键字,int,查找,model
From: https://www.cnblogs.com/bclshuai/p/18196689

相关文章

  • QStandardItemModel 遍历勾选的项
    QStandardItemModel遍历勾选的项rowCount()不能传入 m_model->index(0,0)根节点,无法获取行数;不传,或者传入一个空QModelIndex对象,可以获取到第一级节点的数量;QMap<QString,QVariantMap>mapSelectVideo;introotRowCount=m_model->rowCount();for(inti=0;i<ro......
  • Splunk常用关键字
    1.search-用于过滤事件[search...]#在默认情况下,所有搜索都隐含了search命令2.index-用于指定搜索的索引index="xxx"#如果不指定索引,Splunk会在所有可访问的索引中搜索3.|-管道符:将一个命令的输出作为另一个命令的输入|wheretype=="result"#......
  • 使用快捷键的方式把多个关键字文本快速替换(快速替换AE脚本代码)
    首先,需要用到的这个工具:度娘网盘提取码:qwu2蓝奏云提取码:2r1z 这里做AE(AdobeAfterEffact)里的脚本规则,把英文替换成中文,如下swap=thisComp.layer(“Segmentsettings”).effect("%")(“Checkbox”);if(swap==true){s=thisComp.layer(“Segmentsettings”).effect(“S......
  • 数据结构学习笔记-先序遍历森林
    先序遍历森林问题描述:设计算法输出先序遍历的森林节点及其所在的层次【算法设计思想】1.数据结构定义首先,定义二叉树节点的数据结构。每个节点包含存储数据的data字段,以及指向左右子节点的指针(lChild和rChild)。这种数据结构是二叉树和森林表示的基础。2.先序遍历单棵树设......
  • Object.values()对象遍历
    Object.keys() 对象的遍历 返回给定对象所有可枚举属性的数组;是属性名组成的数组letobj={a:1,b:2,c:3};Object.keys(obj).map((key)=>{console.log(key,obj[key]);}); Object.values() 对象的遍历返回一个给定对象自身的所有属性值的......
  • 目录遍历(Pikachu)
    原理Web安全-目录遍历漏洞_百度搜索文件遍历漏洞-CSDN博客防御1.对用户的输入进行验证,特别是路径替代字符如“../”和“~/”。2.尽可能采用白名单的形式,验证所有的输入。3.合理配置Web服务器的目录权限。4.当程序出错时,不要显示内部相关配置细节。5.对用户传过来的文件名......
  • js 遍历数组取出字符串用逗号拼接
    var arr=[{"name":"hhh"},{"name":"dddd"}] //用jsfunction getTextByJs(){    var str= "";    for (var i=0;i<arr.length;i++){        str+=arr[i].name+ ",";    }    //去掉最后一个逗号(如......
  • 如何快速断行、分割行、切割行、换行、限制每行字数、平均分割每行字数、序号自动换行
    首先,需要用到的这个工具:度娘网盘提取码:qwu2蓝奏云提取码:2r1z 打开工具,切换到“文章工作域”(嗯...默认就是) 找到这个,多内容断行分割点击打开,出现如下窗口设置   相关的设置都在上面,涉及的功能有:限制每行字数、根据行数均等字数的换行、整理出指定关键内容起......
  • 【C语言】---- sizeof关键字计算变量的大小
    简介sizeof是C语言中一个非常重要的关键字,它用于计算变量、类型和数组的大小。sizeof的作用是获取变量或数据类型在内存中所占用的字节数。在C语言中,所有的数据都有一个确定的大小,这个大小取决于数据类型。例如,一个int类型的数据在大多数系统中占用4个字节,而一个char......
  • for 、range关键字、内置方法
    【一】while循环补充continue:结束当前当次循环break:结束整个循环【二】for循环遍历可迭代类型(能索引取值的也属于可迭代类型)字符串name="dream"forainname:print(a)dream列表name=[1,2,3,4]forainname:print(a)1234元组name......