QTreeWidget使用小结
来源:互联网 发布:知乎网友 蒙歌 编辑:程序博客网 时间:2024/06/11 16:59
个人随笔 (Owed by: 春夜喜雨 http://blog.csdn.net/chunyexiyu)
参考:http://blog.csdn.net/qq5823996/article/details/6461611
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*,intcolumn) 点击(包括选中,也包括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的简单使用
- QTreeWidget的简单使用
- QTreeWidget的使用
- QTreeWidget的使用 .
- QTreeWidget的简单使用
- QTreeWidget的简单使用
- QTreeWidget的使用
- QTreeWidget的简单使用
- QTreeWidget的简单使用
- QTreeWidget的使用
- QTreeWidget的使用
- QTreeWidget的简单使用
- qt QTreeWidget使用
- QTreeWidget的简单使用
- QTreeWidget的简单使用
- QTreeWidget的简单使用
- QTreeWidget的使用
- React Native 学习四 第三方组件
- LeetCode 91. Decode Ways
- Spring入门(接口、IOC、注入)
- JAVA学习之break与continue的区别
- webstorm恢复误删除的项目
- QTreeWidget使用小结
- struts2 使用动态调用时出现的问题
- 利用 Java dump 进行 JVM 故障诊断
- @JsonFormat(pattern="yyyy-MM-dd",timezone="GMT+8") @DateTimeFormat(pattern="yyyy-MM-dd")
- 前端开发怎么使用图标字体?
- 考试中暴露的问题
- 【treap模板】【TyvJ 1728】【普通平衡树】
- Jsoup总结
- 图形学基础知识