和记娱乐


网站导航

联系我们

和记娱乐

联系人: 

电 话:021-64057486

公司网址:http://www.happy123456789.com

   址:成都市松江区漕河泾松江新兴产业园区研展路丰产支路55号B座803室

邮编:201165


通信科技

您的当前位置: 和记娱乐主页 > 通信科技 >

利用C++11的function和bind功能,实现QStandardItemM

发布日期:2019-08-23 07:35 来源:和记h88 发布人:和记娱乐 点击:

  在使用Qt的树形视图和表格视图QTableView和QTreeView时,经常需要遍历所有条目,每种功能都写一个遍历函数既麻烦又不符合编程最简原则,因此,写一个通用的遍历函数是很必要的(类似于std::for_each),对于遍历时实现的功能不一样,可以通过函数指针来代替需要实现的功能。

  在讲这个之前,需要了解std::function和std::bind,具体可以自行谷歌。 可参考:

  这里使用C++11的新特性function( VS2010),定义一个函数指针用于回调实现功能。 函数ergodicAllItem用于遍历所有项目,ergodicItem用于遍历项目下的所有子项目。回调函数返回bool用于决定是否继续,如果为true就继续遍历,如果为lse就停止遍历 为了简单起见,下面用递归实现遍历(ergodicItem是尾递归函数)

  回调函数即可写在类里,也可以写为全局函数,若除了QStandardItem*还需要别的参数,那么可以用std::bind帮忙。

  下面举一个例子 例子功能是通过关键字高亮条目。在使用QTreeView或QTableView时,在条目多的情况下,需要搜索某些条目,对搜索结果进行高亮,这时,就需要遍历整个View里的条目,对符合的条目进行高亮 遍历的函数已经写好,现在缺少的是回调的函数,由于遍历的函数使用的函数指针是std::function,因此回调函数即可写为全局函数也可以写为类函数 回调函数声明:

  使用QStandardItem的setData函数,设置角色为Qt::BackgroundRole,即可设置背景颜色。 实现函数中is_match_string函数是用来检测是否符合关键字,如果符合关键字,就返回true,符合关键字就给条目背景赋予不同的颜色,否则就把颜色消除。 回调函数返回true,意味着一直遍历,直到所有遍历完成。

      和记娱乐,和记h88,h88平台官网