QT学习:制作树形列表菜单

2023-11-11

一、前言

使用QT制作树形的列表菜单,需要使用QTreeWidget和QTreeWidget两个类。最终效果如图所示:

二、代码方式实现

使用代码方式实现树形菜单,首先要包含两个类库。

#include <QTreeWidget>
#include <QTreeWidgetItem>

接着创建一个QTreeWidget对象,设置相关属性。

//创建QTreeWidget对象,指定父对象
QTreeWidget *tree = new QTreeWidget(this);
//设置位置以及大小
tree->setGeometry(0,20,100,420);
//可以设置背景颜色
tree->setStyleSheet("background-color:pink;");
//设置列标题
tree->setHeaderLabel("功能导航");
//如果不想显示标题,可以隐藏
tree->setHeaderHidden(true);
//设置不同层次菜单的缩进
tree->setIndentation(10);

随后,为tree插入第一级节点菜单。

QTreeWidgetItem *item1 = new QTreeWidgetItem(tree,QStringList("病人管理"));
QTreeWidgetItem *item2 = new QTreeWidgetItem(tree,QStringList("医生管理"));
QTreeWidgetItem *item3 = new QTreeWidgetItem(tree,QStringList("营收管理"));

让我们来看看这里使用到的QTreeWidgetItem构造函数。

/**
 * @param : parent 关联的窗口或父节点
 * @param : strings 列数据,这里只有一列,不用深究
 * @param : type 用不到,不用管
*/
QTreeWidgetItem::QTreeWidgetItem(QTreeWidget *parent, const QStringList &strings, int type = Type)

第一级节点上去就是tree了,自然就是挂在tree下,所以第一个参数为tree。

接下来插入第二级节点。

QTreeWidgetItem *item11 = new QTreeWidgetItem(item1,QStringList("病人信息"));
QTreeWidgetItem *item12 = new QTreeWidgetItem(item1,QStringList("病床调动"));
QTreeWidgetItem *item21 = new QTreeWidgetItem(item2,QStringList("医生信息"));
QTreeWidgetItem *item22 = new QTreeWidgetItem(item2,QStringList("员工调动"));
QTreeWidgetItem *item31 = new QTreeWidgetItem(item3,QStringList("药品"));
QTreeWidgetItem *item32 = new QTreeWidgetItem(item3,QStringList("设备"));

 谁是第二级节点的父节点,就挂在那一个父节点下,所以第一个参数即对应的父节点。如果想要设置更深层次的树形菜单,也是按照这个思路一步一步深入下去。

到这里节点已经设置完毕,接下来就要为节点设置图标了。

item1->setIcon(0,QIcon("M:\\pictures\\素材图\\学士帽.png"));

 如上所示,设置图标需要使用QTreeWidgetItem类的setIcon方法。我们这里设计的树形菜单只有一列,因此第一个参数为0。第二个参数是QIcon类型的对象,括号里面是本地图片的路径。注意在 \ 前加一个 \ ,前一个是转义字符,后一个才是真正的 \ 。

其余节点的图标设置也相同,不再赘述。

至此,就完成了一个简单的树形菜单。

三、UI设计师界面实现

使用UI设计师界面实现会更加直观,无需敲代码,就算不懂代码的朋友也能轻松搞定。

创建一个项目(不会可见另一篇博文:https://blog.csdn.net/weixin_45138590/article/details/109189652),双击UI文件。

选择Item Widgets(Items Based)里的Tree Widget控件,拖拽一个到中间的界面窗口。

双击Tree Widget控件即可编辑列标题和设置节点。

通过上述操作,即可完成节点的设置。接着为节点设置图标:选择一个节点,点击右侧的属性,会弹出属性框,点击icon属性的Normal Off右侧的值框,点击三角形选择文件。

选择你所需要的图片就能完成图标的设置!

至此,一个简单的树形菜单就完成了!

四、QTreeWidget控件常用设置总结

//设置位置以及大小
tree->setGeometry(0,20,100,420);
//可以设置背景颜色
tree->setStyleSheet("background-color:pink;");
//设置列标题
tree->setHeaderLabel("功能导航");
//如果不想显示标题,可以隐藏
tree->setHeaderHidden(true);
//设置不同层次菜单的缩进
tree->setIndentation(10);
//设置节点之间的行距
setStyleSheet(
                "QTreeWidget::item{"
                "height:25px;"
                "}"
                );
//设置边框不可见
ui->tree->setFrameStyle(QFrame::NoFrame);
//将菜单设置为禁用状态
ui->tree->setEnabled(false);

 

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

QT学习:制作树形列表菜单 的相关文章

  • 如何在 C# / .NET 中创建内存泄漏[重复]

    这个问题在这里已经有答案了 可能的重复 托管代码中是否可能存在内存泄漏 特别是 C 3 0 https stackoverflow com questions 6436620 is it possible to have a memory
  • ASP.NET Web API 客户端 ProgressMessageHandler Post 任务卡在 WinForm 应用程序中

    我在用着HttpClient and ProgressMessageHandler来自MS ASP NET Web API 客户端库 http nuget org packages Microsoft AspNet WebApi Clien
  • 根据 N 个值中最小的一个返回不同的结果

    不确定如何使标题更具描述性 所以我只是从一个例子开始 我使用下面的代码位 它从枚举中选择一个方向 具体取决于四个轴中哪一个与给定方向相比形成最小角度 static Direction VectorToDirection Vector2 di
  • 与 Qt 项目的静态链接

    我有一个在 Visual Studio 2010 Professional 中构建的 Qt 项目 但是 当我运行它 在调试或发布模式下 时 它会要求一些 Qt dll 如果我提供 dll 并将它们放入 System32 中 它就可以工作 但
  • 找不到 assimp-vc140-mt.dll ASSIMP

    我已经从以下位置下载了 Assimp 项目http assimp sourceforge net main downloads html http assimp sourceforge net main downloads html Ass
  • ASP.Net Core 内容配置附件/内联

    我正在从 WebAPI 控制器返回一个文件 Content Disposition 标头值自动设置为 附件 例如 处置 附件 文件名 30956 pdf 文件名 UTF 8 30956 pdf 当它设置为附件时 浏览器将要求保存文件而不是打
  • 动态生成的控件 ID 返回为 NULL

    我可以在 Page PreInit 函数中创建动态控件 如何检索控件及其 ID 我的 C 代码用于创建动态控件之一 var btn new WebForms Button btn Text btn ID Addmore btn Click
  • fprintf() 线程安全吗?

    我正在为野人就餐问题的某些变量编写一个 C 解决方案 现在 我创建线程 每个线程都将 FILE 获取到同一个调试文件 在线程内我正在使用 fprintf 进行一些打印 打印的语句不受任何类型的互斥锁等保护 我没有在调试文件中观察到任何交错行
  • 类的成员复制

    在学习 复制成员 概念时 书中给出了如下说法 此外 如果非静态成员是引用 const 或没有复制赋值的用户定义类型 则无法生成默认赋值 我不太明白这个声明到底想传达什么 或者说这个说法指的是哪一种场景 谢谢 该语句与编译器自动为您编写的类
  • 在 JSQMessagesViewController 中显示 LocationMediaItem

    我刚刚尝试实施LocationMediaItem in my Xamarin iOS应用程序使用JSQMessagesViewController 一切都很顺利 唯一的问题是UICollectionView应该显示位置的单元格永远停留在加载
  • std::forward_as_tuple 将参数传递给 2 个构造函数

    我想传递多个参数以便在函数内构造两个对象 以同样的方式std pair
  • 如何在服务器端按钮点击时关闭当前标签页?

    我尝试在确认后关闭当前选项卡 因此我将以下代码放在确认按钮的末尾 但选项卡没有关闭 string jScript ClientScript RegisterClientScriptBlock this GetType keyClientBl
  • C++ php 和静态库

    我创建了一个library a 其中包含 cpp 和 h 文件 其中包含很多类 嵌套类和方法 我想在 php 示例中包含这个静态库并尝试使用它 我想提一下 我是 php 新手 我已经在 test cpp 文件中测试了我的 libray a
  • 将二进制数据从 C# 上传到 PHP

    我想将文件从 Windows C 应用程序上传到运行 PHP 的 Web 服务器 我知道 WebClient UploadFile 方法 但我希望能够分块上传文件 以便我可以监控进度并能够暂停 恢复 因此 我正在读取文件的一部分并使用 We
  • 如何在标准 WPF ListView 中启用 UI 虚拟化

    我正在使用 NET 4 5 VS2012 并且我有一个 ListView 看起来像这样
  • 是否有相当于 Clang/LLVM 的 .spec 文件,在哪里可以找到参考?

    The gcc驱动程序可以配置为使用特定的链接器 特定的选项和其他细节 例如覆盖系统头 specs files 当前 截至撰写本文时 GCC 版本 4 9 0 的手册此处描述了规范文件 https gcc gnu org onlinedoc
  • 如何在c的case语句中使用省略号?

    CASE expr no commas ELLIPSIS expr no commas 我在c的语法规则中看到了这样的规则 但是当我尝试重现它时 int test float i switch i case 1 3 printf hi 它失
  • ASP.NET MailMessage.BodyEncoding 和 MailMessage.SubjectEncoding 默认值

    很简单的问题 但我在 MSDN 上找不到答案 查找 ASP NET 将用于的默认值 MailMessage BodyEncoding and MailMessage SubjectEncoding 如果你不在代码中设置它们 Thanks F
  • 使用taskkill停止Windows服务

    我需要帮助来使用 C 终止 Windows 服务 现在要终止该服务 请使用以下选项 从命令 sc queryex ServiceName 发现后PID服务的 taskkill pid 1234 exemple f 为了便于阅读 但如果您明白
  • Java 和/C++ 在多线程方面的差异

    我读过一些提示 多线程实现很大程度上取决于您正在使用的目标操作系统 操作系统最终提供了多线程能力 比如Linux有POSIX标准实现 而windows32有另一种方式 但我想知道编程语言水平的主要不同 C似乎为同步提供了更多选择 例如互斥锁

随机推荐

  • android ARouter源码分析

    背景 随着项目越做越大 代码量越来越多 项目也随之改造成组件化的开发模式 组件化开发非常适合庞大的项目 将每个业务模块 功能模块解耦 抽离成组件的形式 各个组件遵循严格的依赖关系 因为这层严格的依赖关系 使得组件化比模块化结构更加简洁和清晰
  • python中objects_python之django的objects.get和objects.filter方法

    为了说明它们两者的区别定义2个models class Student models Model name models CharField 姓名 max length 20 default age models CharField 年龄
  • 实现简单感知机_感知机的原始算法与对偶算法

    一 感知机模型 感知机是一个二分类的线性分类模型 输入为实例的特征向量 输出实例的类别 取1 1两个值 输入判别模型 它适用于线性可分的数据集的分类 所谓线性可分 就是两类数据可以用空间中的一个超平面分离 即存在参数 当 属于其中一类时 当
  • 001:输出第二个整数

    001 输出第二个整数 描述 输入三个整数 把第二个输入的整数输出 输入 只有一行 共三个整数 整数之间由一个空格分隔 整数是32位有符号整数 输出 只有一行 一个整数 即输入的第二个整数 样例输入 123 456 789 样例输出 456
  • cdn.jsdelivr.net访问超时,临时解决方案

    近日在访问https cdn jsdelivr net npm swagger ui dist 4 swagger ui bundle js 时候发现net ERR CONNECTION TIMED OUT 查看官网 发先已有用户提交问题
  • .exe解释

    exe文件 exe就是可执行文件 可执行文件就是程序 qq 浏览器 word等等这些程序其实就是一个个的 exe格式文件 它们和存在电脑里的照片 文档 视频一样 都是一个个文件 只不过格式不一样 word文档是 doc或者 docx格式的
  • 源码安装 nginx/1.15.8 的脚本

    环境是在centos7 下 其他环境还未试过 nginx 的安装路径在 usr local nginx bin bash 一般系统中已经装了了make和g 无须再装 yum y install autoconf automake make
  • 【通讯录--动态实现】

    目录 前言 一 功能设置 声明结构体 1 初始化 2 释放空间 3 添加联系人 4 删除联系人 5 查找联系人 6 修改联系人 7 显示联系人 8 清空联系人 9 排序联系人 二 整体代码 1
  • js的三种使用方式(行内js、内部js、外部js)

    1 行内js js不单独写出
  • 远程VirtualBox上的Linux虚拟机

    项目场景 为了能够隔离实验环境 在VirtualBox上安装了Centos7用来专门跑实验 却发现无法远程 关闭防火墙和SELinux 1 关闭防火墙 2 关闭SELinux getenforce 命令查看是否开启 若为 Enfocing
  • ERP系统设计:库存管理怎么做?

    库存是企业打算出售给客户以获取利润的商品或材料 库存管理是供应链的一个关键要素 涉及到从制造商到仓库 从这些设施到销售点的库存跟踪 库存管理的目标是在适当的时间将适当的产品放置在适当的地点 库存管理的业务问题 在进行库存管理工作时 会出现很
  • 基于Python的大数据分析基础(一)

    关于Pandas Pandas中的数据结构 1 Series 一维数组系列 也称序列 2 DataFrame 二维的表格型数据结构 3 Panel 三维数组 数据类型 1 Logical 逻辑型 2 Numeric 数值型 3 Charac
  • NodeJS简介-node.js是什么?

    Nodejs是个在服务器动可以解析和执行JavaScript代码的运行环境 也可以说是一个运行时平台 仍然使用JavaScript作为开发语言 但是提偶了一些功能性的API 例如文件操作和网络通信API等 Nodejs是由 Ryan Dah
  • ssh key authentication失败,查看日志是selinux禁止了sshd读取authorized_keys文件

    ssh key authentication失败 查看日志是selinux禁止了sshd读取authorized keys文件 May 5 04 24 36 localhost dbus 704 system Activating serv
  • C#的变迁史 - C# 4.0 之线程安全集合篇

    作为多线程和并行计算不得不考虑的问题就是临界资源的访问问题 解决临界资源的访问通常是加锁或者是使用信号量 这个大家应该很熟悉了 而集合作为一种重要的临界资源 通用性更广 为了让大家更安全的使用它们 微软为我们带来了强大的并行集合 Syste
  • 基于堆叠⾃编码器的时间序列预测 深层神经网络

    自适应迭代扩展卡尔曼滤波算法 AIEK 是一种滤波算法 其目的是通过迭代过程来逐渐适应不同的状态和环境 从而优化滤波效果 该算法的基本思路是在每一步迭代过程中 根据所观测的数据和状态方程 对滤波器的参数进行自适应调整 以便更好地拟合实际数据
  • python- NameError name ‘name‘ is not defined

    python NameError name name is not defined 练习写python函数的时候 遇到了NameError name name is not defined 这样的错误 百度了一下 发现name是一个系统变量
  • Selenium+Python系列 - 开发环境搭建

    优质资源分享 学习路线指引 点击解锁 知识定位 人群定位 Python实战微信订餐小程序 进阶级 本课程是python flask 微信小程序的完美结合 从项目搭建到腾讯云部署上线 打造一个全栈订餐系统 Python量化交易实战 入门级 手
  • 设计模式:代理模式

    由于某些原因需要给某对象提供一个代理以控制对该对象的访问 这时 访问对象不适合或者不能直接引用目标对象 代理对象作为访问对象和目标对象之间的中介 这就是代理模式 代理模式的主要优点有 1 代理模式在客户端与目标对象之间起到一个中介作用和保护
  • QT学习:制作树形列表菜单

    一 前言 使用QT制作树形的列表菜单 需要使用QTreeWidget和QTreeWidget两个类 最终效果如图所示 二 代码方式实现 使用代码方式实现树形菜单 首先要包含两个类库 include