QTreeWidget 节点选中的图标怎么设置

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了QTreeWidget 节点选中的图标怎么设置相关的知识,希望对你有一定的参考价值。

修改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"
id="treeXml"
dataProvider="departmentTree" labelField="@name"
showDataTips="true" iconFunction="SetIcon" />
</mx:Application>
最后,运行效果即可。
参考技术A QTreeWidgetItem* pTreeItem = nullptr;
pTreeItem = new QTreeWidgetItem(ui->treeWidget, QStringList(QString("000")));

QIcon icon;
icon.addPixmap(QPixmap(":/treeitem_screen_selected.png"), QIcon::Selected);
icon.addPixmap(QPixmap(":/treeitem_screen.png"), QIcon::Normal);
pTreeItem->setIcon(0, icon);

怎么让所有子节点被选中,父节点自动选中 TreeView

参考技术A //设置标志,防止死循环
bool check = false;

//节点勾选后事件,如果更改某一节点状态会自动触发,所以在后面的方法中无需递归
private void treeView1_AfterCheck(object sender, TreeViewEventArgs e)

if(check==false)
setchild(e.Node);
setparent(e.Node);
check = false;


//设置子节点状态
private void setchild(TreeNode node)

foreach (TreeNode child in node.Nodes)

child.Checked = node.Checked;

check = true;


//设置父节点状态
private void setparent(TreeNode node)

if (node.Parent != null)

//如果当前节点状态为勾选,则需要所有兄弟节点都勾选才能勾选父节点
if (node.Checked)
foreach (TreeNode brother in node.Parent.Nodes)

if (brother.Checked == false)
return;

node.Parent.Checked = node.Checked;



原理:先递归到最底层节点,由checkChild()勾选上最底层节点,然后改变check状态,再checkParent()勾选最底层的上一层节点,虽然触发勾选事件,但是check状态改变了,不能再向下勾选,只能向上递归,从而防止了死循环。

普通方式死循环原理:递归到最底层后,勾选上最底层,然后勾选最底层的上一层,但是会自动触发勾选事件,再次递归到最底层,因此造成死循环。

以上是关于QTreeWidget 节点选中的图标怎么设置的主要内容,如果未能解决你的问题,请参考以下文章

怎么让所有子节点被选中,父节点自动选中 TreeView

怎么让所有子节点被选中,父节点自动选中 TreeView

QTreeview在键盘选中节点时怎么获得信号并取得当前节点的内容

jstree 如何获得选中节点的值?

C# winform treeview 节点展开状态的图标设置

桌面的图标和字选中后不是蓝色变成了浅绿色怎么回事?高手速度!!