如何设置QtreeWidgetItem勾选框的样式

如何设置QtreeWidgetItem勾选框的样式,第1张

我不知道别人的做法是怎么样的,我是通过替换图标来实现的;

通过connect(xxx,SIGNAL(clicked(QModelIndex)),this,SLOT(xxx选中()))

在具体的实现方法里,将item的ICON属性设置好成你想要的就可以

开发环境:win10、QT5.9

开发工具:vs2019

1、根据搜索框的内容匹配下面的索引,找到则显示该字段及该字段的上下索引;

2、当找不到该内容则全都不显示;

3、部分字段匹配搜索,输入的字段与索引项存在部分匹配的时候则同样会显示该索引项及其父子索引项;

1、实现该界面

    该界面包括一个QLineEdit控件和一个QTreeWidget控件。

2、使用递归实现对查找到的项的父子索引项遍历且设置为可见

//使用递归的方式向目标节点的父节点进行递归查找

void TableWidgwet::showParent(QTreeWidgetItem* pItem)

{

    if (pItem != nullptr)    //判断当前节点是否存在

    {

        QTreeWidgetItem* pTreeParentItem = pItem->parent()//获取当前节点的父节点

        if (pTreeParentItem != nullptr)  //判断父节点是否存在

        {

            pTreeParentItem->setHidden(false)  //将该父级索引项设置为显示

            showParent(pTreeParentItem)//直接传入处理过的节点

           //避免传入该节点后递归后跳转到祖父节点

        }

   }

}

//使用递归的方式遍历子节点同时设置为显示

void TableWidgwet::showSon(QTreeWidgetItem* pItem)

{

    int iChild = pItem->childCount()  //获取该子节点的数目

    for (int i = 0i <iChild++i)//遍历当前项的子节点并设置

    {

        pItem->child(i)->setHidden(false)

        showSon(pItem->child(i))//对当前 子项进行递归

    }

}

3、对当前的节点进行遍历查找且对遍历的节点进行显示和隐藏的设置

//依旧是采用递归的方式实现

void TableWidgwet::searchItem(QTreeWidgetItem* tableItem,QString&strText)

{

    if (tableItem != nullptr)//防止野指针的问题

    {

        for (int i = 0i <tableItem->childCount()++i)

        {

            QTreeWidgetItem* pTreeItem = tableItem->child(i)

            if (pTreeItem != nullptr)

            {

              //如何索引项字段部分匹配于输入框字段则设置该项及其父子项显示且展开

                if (pTreeItem->text(0).contains(strText))

                {

                    pTreeItem->setHidden(false)

                    pTreeItem->setExpanded(true);

                    showSon(pTreeItem)

                    showParent(pTreeItem)

                }

                else

                {

                    pTreeItem->setHidden(true)//不匹配则隐藏

                    searchItem(pTreeItem, strText)//递归遍历

                }

            }

        }

    }

}

4、对整个树形索引控件的一级索引项进行遍历,并调用上述的函数实现对每个一级索引项下的索引项进行递归遍历设置

void TableWidgwet::showItem()

{

    for (int i = 0i <ui.treeWidget->topLevelItemCount()++i)

    {

            if (ui.treeWidget->topLevelItem(i)->text(0).contains(ui.lineEdit->text()))

            {

                ui.treeWidget->topLevelItem(i)->setHidden(false)

            }

        else

            {

                ui.treeWidget->topLevelItem(i)->setHidden(true)

            }

        searchItem(ui.treeWidget->topLevelItem(i), ui.lineEdit->text())

    }

}

5、使用connect对QLineEdit的textchange事件响应与槽函数绑定处理

        connect(ui.lineEdit, &QLineEdit::textChanged, this, &TableWidgwet::showItem)

修改tree节点的图标的步骤如下:

首先,在src下建立一个assets文件夹,放几张图片;

其次,编写代码如下:

<?xml version="1.0" encoding="utf-8"?>

<mx:Application xmlns:mx="http://www.adobe.com/2006/mxml" fontSize="14" layout="absolute">

<mx:Script>

<![CDATA[

[Embed(source="assets/boy.jpg")]

public var boyIcon:Class

[Embed(source="assets/girl.jpg")]

public var girlIcon:Class

// 根据结点的属性设置节点图标

private function SetIcon(item:Object):*

{

var xml:XML = item as XML

if(xml.attribute("sex")=="boy")

{

return boyIcon

}

else

{

return girlIcon }

}

// Tree控件的数据源

[Bindable]

public var departmentTree:XML=

<member name="小李" sex="boy">

<member name="王志" sex="boy">

<member name="赵强" sex="boy" />

<member name="李丽" sex="girl" />

</member>

<member name="韩梅梅" sex="girl">

<member name="孙艳" sex="girl"/>

</member>

</member>

]]>

</mx:Script>

<mx:Tree x="216" y="0" width="318"

height="450" id="treeXml"

dataProvider="{departmentTree}" labelField="@name"

showDataTips="true" iconFunction="SetIcon" />

</mx:Application>

最后,运行效果即可。


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/bake/11912132.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-19
下一篇 2023-05-19

发表评论

登录后才能评论

评论列表(0条)

保存