• linkedu视频
  • 平面设计
  • 电脑入门
  • 操作系统
  • 办公应用
  • 电脑硬件
  • 动画设计
  • 3D设计
  • 网页设计
  • CAD设计
  • 影音处理
  • 数据库
  • 程序设计
  • 认证考试
  • 信息管理
  • 信息安全
菜单
linkedu.com
  • 网页制作
  • 数据库
  • 程序设计
  • 操作系统
  • CMS教程
  • 游戏攻略
  • 脚本语言
  • 平面设计
  • 软件教程
  • 网络安全
  • 电脑知识
  • 服务器
  • 视频教程
  • JavaScript
  • ASP.NET
  • PHP
  • 正则表达式
  • AJAX
  • JSP
  • ASP
  • Flex
  • XML
  • 编程技巧
  • Android
  • swift
  • C#教程
  • vb
  • vb.net
  • C语言
  • Java
  • Delphi
  • 易语言
  • vc/mfc
  • 嵌入式开发
  • 游戏开发
  • ios
  • 编程问答
  • 汇编语言
  • 微信小程序
  • 数据结构
  • OpenGL
  • 架构设计
  • qt
  • 微信公众号
您的位置:首页 > 程序设计 >qt > qt中QTreeWidget使用

qt中QTreeWidget使用

作者:春夜喜雨 字体:[增加 减小] 来源:互联网 时间:2017-09-22

春夜喜雨通过本文主要向大家介绍了QTreeWidget等相关知识,希望对您有所帮助,也希望大家支持linkedu.com www.linkedu.com

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, state)

{

   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(pItem, 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(const QPoint &)), this, SLOT(onTreeMenuPopup(const QPoint &)));

 

绑定显示时,通常的做法是:把传入坐标转换到世界坐标系,并稀释出来

m_pMenuOfTree->popup(m_pTree->mapToGlobal(pos));

 

 

 

5. 消息响应

消息响应是重点,记录操作内容

通常我们响应

itemClicked(QTreeWidgetItem*, int column)   点击(包括选中,也包括checkbox选择)

itemPressed(QTreeWidgetItem*, int)   点击选中(不包括checkbox选择)

itemChanged(QTreeWidgetItem*, int) 状态变更就会响应,也包括程序置的状态,使用时需要注意

customContextMenuRequested(const QPoint&) 弹出右键菜单消息

 

6. 另外QTreeWidget提供了一些方法

例如:全部展开,全部折叠等方法

expandAll - 树展开

collapseAll - 树收起

expand – item展开

clllapse – item收起

selectedItems – 获取选中的项s

currentItem –当前item

 

 个人随笔 (Owed by: 春夜喜雨 http://blog.csdn.net/chunyexiyu)

 

分享到:QQ空间新浪微博腾讯微博微信百度贴吧QQ好友复制网址打印

您可能想查找下面的文章:

相关文章

  • 2017-09-23Qt-Qt creator快捷键
  • 2017-09-22qt中QLayout的使用小结
  • 2017-09-22QGraphicsItem的缩放
  • 2017-09-22qt中QTreeWidget使用
  • 2017-09-13QTableView 双击 获取 一行数据
  • 2017-09-08Qt 之 QSqlRelation Class
  • 2017-09-23Qt-代码编程风格与规范

文章分类

  • JavaScript
  • ASP.NET
  • PHP
  • 正则表达式
  • AJAX
  • JSP
  • ASP
  • Flex
  • XML
  • 编程技巧
  • Android
  • swift
  • C#教程
  • vb
  • vb.net
  • C语言
  • Java
  • Delphi
  • 易语言
  • vc/mfc
  • 嵌入式开发
  • 游戏开发
  • ios
  • 编程问答
  • 汇编语言
  • 微信小程序
  • 数据结构
  • OpenGL
  • 架构设计
  • qt
  • 微信公众号

最近更新的内容

    • Qt 之 QSqlRelation Class
    • QGraphicsItem的缩放
    • QTableView 双击 获取 一行数据
    • Qt-代码编程风格与规范
    • qt中QTreeWidget使用
    • qt中QLayout的使用小结
    • Qt-Qt creator快捷键

关于我们 - 联系我们 - 免责声明 - 网站地图

©2020-2025 All Rights Reserved. linkedu.com 版权所有