个人随笔 (Owed by: 春夜喜雨 http://blog.csdn.net/chunyexiyu)
QTreeWidget形成的树形控件是比较简单易用的,经过这段时间的使用,有了一些了解,特意总结下来,以供参考:
1. 隐藏表头
表头是否需要,通过setHeaderHidden方法来控制隐藏:
setHeaderHidden(true) |
2. 添加元素
QTreeWidget是树形结构的,数据添加的时候也是符合树形结构特点的;
QTreeWidgetItem是树形结构的节点;
// 清空原有数据 m_pTree->clear(); // 节点定义 QTreeWidgetItem* pItem = new QTreeWidgetItem(); pItem->setText(0, “item1”); // 节点上setData可以放很多种数据Variant,例如type, key,value等 pItem->setData(0, Qt::UserRole, nType); pItem->setData(0, Qt::UserRole+1, sValue); … // 节点还可以添加子节点 pItem->addChild(..);
// 添加节点到树QTreeWidget上 m_pTree->addTopLevelItem(pItem); |
3. 为节点添加CheckBox
为树节点添加CheckBox是比较简单的,只要设置了就可以展示出来
pItem1->setCheckState(0,Qt::Unchecked); … pItem2->setCheckState(0,Qt::PartiallyChecked); … pItem3->setCheckState(0,Qt::checked); |
对于节点的状态同步的话,需要自己手动同步,例如子节点选取了,父节点状态的同步,父节点选取了,子节点的同步:同步一般用递归
// 伪代码:父节点点击后,向子节点同步状态,直接同步 void SynStateToChild(pItem, state) { for (int i=0; i<pItem->childCount(); i++) { pChildItem = pItem->child(i); pChildItem->setCheckState(state); SynStateToChild(pChildItem, state); }; } //伪代码:子节点向上同步状态,需要对父节点的子节点全部识别,才能确定状态 void SynStateToParent(pItem) { QTreeWidgetItem* pParemtItem = pItem->parent(); if (pParentItem == nullptr) return; bool bHasChecked = false; bool bAllChecked = true; for (int i=0; i< pParemtItem->childCount(); i++) { QTreeWidgetItem* pChildItem = pParemtItem->child(i); Qt::checkState state = pChildItem->checkState(state); if (state == Qt::Checked || state == Qt::PartiallyChecked) bHasChecked = true; if (state != Qt::Checked) bAllChecked = false; }; pParentItem->setCheckState(bAllChecked ? Qt::Checked : (bHasChecked ? Qt::PartiallyChecked : Qt::Unchecked)); SynStateToParent(pParemtItem, state) } |
4. 添加右键菜单
首先要创建出菜单,然后再对应的打开属性,绑定菜单显示,分为三步
a. 创建菜单 m_pMenuOfTree = new QMenu(); m_pMenuOfTree->addAction(QString::fromLocal8Bit(“菜单子项1″),this, SLOT(onMenu1())); m_pMenuOfTree->addAction(QString::fromLocal8Bit(“菜单子项2″),this, SLOT(onMenu1())); b. 打开右键菜单属性 m_pTree->setContextMenuPolicy(Qt::CustomContextMenu); 属性打开后,Signal才会开始发送customContextMenuRequested c. 绑定显示 connect(m_pTree,SIGNAL(customContextMenuRequested(constQPoint &)), this,SLOT(onTreeMenuPopup(constQPoint &))); 绑定显示时,通常的做法是:把传入坐标转换到世界坐标系,并稀释出来 m_pMenuOfTree->popup(m_pTree->mapToGlobal(pos)); |
5. 消息响应
消息响应是重点,记录操作内容
通常我们响应
itemClicked(QTreeWidgetItem*,int column) 点击(包括选中,也包括checkbox选择)
itemPressed(QTreeWidgetItem*,int) 点击选中(不包括checkbox选择)
itemChanged(QTreeWidgetItem*,int) 状态变更就会响应,也包括程序置的状态,使用时需要注意
customContextMenuRequested(constQPoint&) 弹出右键菜单消息
6. 另外QTreeWidget提供了一些方法
例如:全部展开,全部折叠等方法
expandAll – 树展开
collapseAll – 树收起
expand – item展开
clllapse – item收起
selectedItems – 获取选中的项s
currentItem –当前item
个人随笔 (Owed by: 春夜喜雨 http://blog.csdn.net/chunyexiyu)
今天的文章遍历qtreewidget_qtreewidget排序[通俗易懂]分享到此就结束了,感谢您的阅读。
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。
如需转载请保留出处:https://bianchenghao.cn/71700.html