qtreewidget用法_qtreewidgetitem

qtreewidget用法_qtreewidgetitemTreeWidget形成的树形控件是比较简单易用的,经过这段时间的使用,有了一些了解,特意总结下来,以供参考:1.隐藏表头2.添加元素3.为节点添加CheckBox4.添加右键菜单5.消息响应6.QTreeWidget提供了一些方法

大家好,又见面了,我是你们的朋友全栈君。如果您正在找激活码,请点击查看最新教程,关注关注公众号 “全栈程序员社区” 获取激活教程,可能之前旧版本教程已经失效.最新Idea2022.1教程亲测有效,一键激活。

Jetbrains全系列IDE稳定放心使用

个人随笔 (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)

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/186937.html原文链接:https://javaforall.net

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • 解决failed to execute [‘dot’, ‘-Tsvg’], make sure the Graphviz executables are on your systems

    解决failed to execute [‘dot’, ‘-Tsvg’], make sure the Graphviz executables are on your systems在用python可视化.dot文件时,遇到了ExecutableNotFound:failedtoexecute[‘dot’,‘-Tsvg’],makesuretheGraphvizexecutablesareonyoursystems的报错。起初以为原因是未安装graphviz模块,pip一下发现还是不行,后来才发现需要先安装graphviz程序,才能为python安…

    2025年7月14日
    4
  • mysql开启慢日志查询_MySQL慢sql检验生效

    mysql开启慢日志查询_MySQL慢sql检验生效MySQL给我们提供了一个很好的功能,那就是慢查询!所谓的慢查询就是通过设置来记录超过一定时间的SQL语句!那么如何应用慢查询呢?1.开启MySQL的慢查询日志功能默认情况下,MySQL是不会记录超过一定执行时间的SQL语句的。要开启这个功能,我们需要修改MySQL的配置文件:windows下修改my.ini,(注册表,计算机\HKEY_LOCAL_MACHINE\SYSTEM\CurrentCo…

    2022年10月14日
    4
  • C++基础入门_C语言入门基础

    C++基础入门_C语言入门基础C++基础入门0.写在前面本篇笔记视频讲解地址:https://www.bilibili.com/video/BV1et411b73Z?p=1笔记配合视频效果更好外链图片上传失败已经解决与各位共勉用来复习回顾使用1C++初识1.1第一个C++程序编写一个C++程序总共分为4个步骤创建项目创建文件编写代码运行程序1.1.1创建项目​ VisualStudio是我们用来编写C++程序的主要工具,我们先将它打开1.1.2创建文件右键源文件,选择添加-&gt

    2025年10月18日
    2
  • 同济大学土木工程学院招收2名秋季入学全日制博士生

    同济大学土木工程学院招收2名秋季入学全日制博士生招生群体面向应届或往届硕士生,2020年秋季入学的博士生(全日制)研究方向智能建造与运营、人工智能与土木工程创新应用拟招人数2人招生要求具有本科和硕士学位,本科211或985;优…

    2022年7月25日
    23
  • .net 零拷贝_模拟总线型以太网数据帧发送过程

    .net 零拷贝_模拟总线型以太网数据帧发送过程mmap/munmap接口是用户空间的最常用的一个系统调用接口,无论是在用户程序中分配内存、读写大文件,链接动态库文件,还是多进程间共享内存,都可以看到mmap/munmap的身影。

    2022年9月16日
    2
  • 滤波算法(四)—— 卡尔曼滤波算法[通俗易懂]

    滤波算法(四)—— 卡尔曼滤波算法[通俗易懂]一、算法介绍卡尔曼滤波是一个神奇的滤波算法,应用非常广泛,它是一种结合先验经验、测量更新的状态估计算法。1、状态估计首先,对于一个我们关心的物理量,我们假设它符合下面的规律其中,为该物理量本周期的实际值,为该物理量上一个周期的实际值,当然这个物理量可能不符合这个规律,我们只是做了一个假设。不同的物理量符合的规律不同,是我们的经验,我们根据这个规律…

    2022年6月13日
    29

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号