Qt creator中操作QAction加入QToolBar

news2024/11/18 18:42:26

背景:

个人笔记。

我之前没有系统化学习过任何资料,使用很多工具都是按需出发,直接上手,遇到问题再研究的。所以会有一些弯路。本文言语中难免有对个人情绪的生动描述,希望不要影响读者心情,这只是我学习过程的真实写照。

早先接手的项目中用到了QToolBar和QAction,一直用现成的,直到一次和同事讨论qss,在Creator中操作示例,才发现这叫一个难用。好不夸张说,多次尝试和对比才发现了玄机。

网上搜出来都是说如何new,如何addWidget,addAction之类,对于我没有意义。界面设计如果还不是可视化的,非要运行才能看效果,这不是我想要的。

当然我做的项目中,用到了用户功能权限的动态控制,用代码控制当然可以,但这不符合界面设计逻辑。

因此特别写下来记录。下面都是在creator中说明,不需要写代码,纯可视化实现。

QToolBar:

首先在creator中打开一个QMainWindow。可以看到右边“对象管理器”中的部件层级。

有点像MFC项目中的范例,它会默认带菜单栏,工具栏,状态栏。可以用鼠标在对象管理器中右键移除,也可以直接在窗体相应位置右键移除。

如果要添加,就在对象管理器根节点“MainWindow”上右键选择添加即可。

吐槽:

它就不能设计成统一风格?既然是部件,都从工具箱选择多好?纯个人习惯,我就感觉它不爽。想必qt这么设计有它的用意。

还有,我试过,通过提升为加上部件嵌套的方式,让MainWindow里再嵌套一个MainWindow,里面那个就不显示了。我没有深究为什么。一般也不这样用。主要是我同事提了一个需求,他希望改变工具栏层级,比如让它出现在其它部件的里面。

但qt的套路,我现在的理解是,工具栏不是普通部件,它只能属于MainWindow,因此它不能像其它部件那样随意安排位置。因为我暂时用不到,暂且搁置不深究了。有兴趣的朋友,咱们评论区详聊。

关于creator中的其它子窗体:

玩过vs的应该知道,IDE中的各种子窗体都可以随意改变位置和关闭,根据需要再显示。比如工具箱、对象管理器、资源管理器、解决方案管理器、类视图、调试窗口等。

qt里面貌似很多都是死的,就如下面这样:

像工具箱、对象管理器、属性管理器、下面的Action Editer等,可以拖拽改变位置,但没有右上角一个小叉。这些无伤大雅,也算各有风格。需要适应一下。此刻请记住这个图片,一会儿提到。

QAction:

使用上面的方法,为窗体添加一个工具栏。

添加后,会多出上图红色部分。此刻它就是个空容器,卵用没有。

然后看下面的Action Editer。是可以添加QAction,但跟界面没任何关系。

上图蓝框部分没有对钩,即使在右边属性那里有enabled值为true,这里也不行。如果第一次接触这里,能烦死。

此刻留意右上方的对象管理器:

尽管下面添加了几个QAction,但是他们跟QToolBar没产生联系。qt的意思是,QAction是个特殊零件,刚才只是管理这些零件,回头还得跟QToolBar连接才行。也就是代码里的addAction和addWidget。

这个时候用鼠标从Action Editer里面,把这些action拖拽到窗体上:

上图篮圈的部分有变化。拖拽的时候,在窗体那个很窄的工具栏上会有一个红色的依附指示,就好像窗体布局一样,然后它就上去了。

上图中,能看到action已经放入工具栏,对象管理器中,QToolBar下面也有了一个节点。这才算连接成功了。再看下面action editer那里,“使用”那一列,才有了对钩。在上面右键的话,也多了一个选项“用于”。

至此,添加QAction完成。在action editer那里的action上面鼠标右键可以转到槽函数,剩下就都知道了。

结束语:

用惯了vs,甚至pb,delphi,还没见过那个界面设计器是这样的。

虽然qt信号槽的方式让我眼前一亮,可以说与“消息事件响应机制”有个明显区别,至少对于我来说也算标新立异,我觉得非常好,用于各种通信太方便了。

但是qt creator刚接触时,太上头了。它对控件的布局也是不同于vs,但是用习惯了还挺好。但是像工具栏、菜单栏、项等,也许它有灵活的用法,但我个人感觉它设计的有些草率了。既然都是部件,都从工具箱开始不好吗?非要搞特殊。

总的来说,相比vc6.0还是友好了许多,也许跟我年龄增长有关。刚毕业那会儿,第一个工作就是让用vc++,其实做下去挺好的。但是当时一看,太上头,因为自己之前尝试用过,如果没人引导,纯自己看书的话,短时间内不好上手。相比vb、pb、delphi要难用。但如果能坚持下来,对程序结构理解会好很多。

总之,qt还是很好用的。纯英文的帮助和社区交流,还是挺好玩的,对学习英语很有帮助。现在的学习环境,比二十年前强太多了。网络昂贵的时代,学东西真费劲,原本很多稍微点拨就开窍的东西,如果自己闷头上,费劲大发了。

像上面提到的qt种种,也许直接先阅读一本综合教材,会少走不少弯路。但是,纯理论学习也要结合实践。或者像我一样,没怎么系统化看过资料,上来就直接用,在不断发现问题的时候再尝试解决,也是一种学习途径。哪种更好就看个人了。

所以,善于在网络分享,贡献自己一份力,会让更多学习者少走弯路。

完结。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/388823.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

前端网络安全

什么是同源策略同源指的是:协议、端口号、域名必须一致。他是浏览器的一个用于隔离潜在恶意文件的重要安全机制。限制了从同一个源加载的文档或脚本,与另一个源的资源进行交互。同源策略主要限制了三个方面:当前域下的js脚本不能够访问其他域…

waf和web应用防火墙的区别

waf和web应用防火墙有什么区别?相信这两个词大家都不陌生,特别是做互联网行业的小伙伴们。对于waf和web应用防火墙,这两个名词的理解应该都很清楚。但是很多小伙伴们不知道WAF防火墙与Web防火墙有什么区别,它们之间的区别在哪里,…

Spring Cloud(微服务)学习篇(七)

Spring Cloud(微服务)学习篇(七) 1.使用代码的方式实现流量限制规则 1.1 变更SentinelController类 1.1.1 加入的代码 //流控限制 (一个或多个资源限流), postConstruct注解的作用是保证项目一启动就会加载,// 一个rule就是一个规则PostConstructpublic void FlowRule(){Li…

【C++】string的成员函数、成员常量和非成员函数

目录 string 1. string的成员函数 1.1 构造、析构和赋值运算符重载 1.1.1 构造函数 1.1.2 析构函数 1.1.3 赋值运算符重载 1.2 迭代器 1.3 容量 1.4 元素访问 1.4.1 遍历方法 1.5 修改器 1.6 字符串操作 2. string的成员常量 3. string的非成员函数 string 以下…

javaEE 初阶 — 应用层中的 DNS 协议(域名解析系统)

文章目录什么是域名1. 如何建立 域名 与 IP 的对应关系2. 域名的分级什么是域名 域名也就是平常所说的网址,比如 www.baidu.com。 其实网络上的服务器要访问这个网址,需要的是 IP 地址。、 但是 IP 地址比较拗口不方便记忆,于是就有使用一些…

单向非循环链表

1、顺序表遗留问题 1. 中间/头部的插入删除,时间复杂度为O(N) 2. 增容需要申请新空间,使用malloc、realloc等函数拷贝数据,释放旧空间。会有不小的消耗。 3. 当我们以2倍速度增容时,势必会有一定的空间浪费。例如当前容量为100&a…

IDEA这些配置,简单高效

优化导包配置配置路径:File-> settings -> Editor -> General -> Auto ImportAdd unambiguous imports on the fly:自动导包Optimize imports on th fly (for current project):自动删除无用包代码提示取消大小写配置路径&#x…

AOP(概念和原理)

文章目录1. AOP(概念)2. AOP(底层原理)2.1 AOP底层使用动态代理(两种)2.2 AOP 底层使用哪种代理方式 ?3. AOP相关概念3.1 AOP术语4. AOP操作4.1 基于AspectJ实现AOP操作4.2 切点表达式4.3 基于A…

6 分布式事务简介

分布式事务简介 概念 基础概念:事务ACID * A(Atomic):原子性,构成事务的所有操作,要么都执行完成,要么全部不执行,不可能出现部分成功部分失 败的情况。 * C(Consisten…

嵌入式和Python(一):python环境搭建的详细步骤

目录 ● 安装python ① 更新软件列表 ② 安装编译python需要用到的环境 ③ 下载python源码 ④ 解压源码包 ⑤ 配置 ⑥ 编译 ⑦ 安装 ● 建立软连接 说明 ① 删除原来的软连接 ② 在/usr/bin/目录创建软连接python,定向/usr/local/bin/python3.9 ③ 检查…

Java面向对象:多态特性的学习

本文介绍了Java面向对象多态特性, 多态的介绍. 多态的实现条件–1.发生继承.2.发生重写(重写与重载的区别)3.向上转型与向下转型.4.静态绑定和动态绑定5. 实现多态 举例总结多态的优缺点 避免在构造方法内调用被重写的方法… Java面向对象:多态特性的学习一.什么是多态?二.多态…

MATLAB | 如何将colormap中心点置为0值处?

本期讲有一些绘图时正负部分需要分开赋予颜色,这时候双向colormap的中心对应的可能并不是数值0,该咋办,就比如下面的情况: 事先说明,为了绘图好看,本文中全部示例都在代码最后用了以下这个简单函数进行修饰…

库到底是个啥?为啥要链接,链接库的本质又是个啥?

目录 前言 一、库是个啥? ①最开始的库是用来解决啥问题? ②库的基本构成 ③动态库与静态库 二、如何生成库 0、相关知识 ①生成静态库 ②生成动态库 三、库的使用 ①修改环境变量 ②拷贝.so文件到系统共享库路径下, 一般指/usr/lib ③ldconfig 配置/etc…

安卓逆向_6 --- JNI 和 NDK

Java 本机接口规范内容:https://docs.oracle.com/en/java/javase/19/docs/specs/jni/index.html JNI官方中文资料:https://blog.csdn.net/yishifu/article/details/52180448 NDK 官方文档:https://developer.android.google.cn/training/ar…

【Python学习笔记】第二十八节 Python random 模块

一、Python random简介Python random 模块主要用于生成随机数。大部分python人都会用,但是一般人都是使用randint()帮我们生成某个范围的整数,但其实random模块还有很多非常使用的功能供我们使用,接下来我们就一一了解一下我们的random。要使…

JavaWeb系列之tomcat 服务器安装

文章目录一、JavaWeb应用程序架构B/S 架构C/S 架构B/S 与 C/S 对比MVC设计模式二、MVCMVC 开发项目搭建Web 服务器tomcat 服务器Idea 集成 tomcat第一个 JavaWeb 项目三、JSP 技术jsp 与 servlet 联系与区别一、JavaWeb 简介 JavaWeb 可以理解成使用 java 进行应用程序开发&am…

Windows-jdk8/jdk16安装

Windows-JAVA jdk-8安装教程 下载地址 百度网盘 提取码:Chen 官网 安装jdk8 双击打开下载的安装包 点击下一步 更改安装目录 点击下一步 修改Java安装目录 点击下一步 完成 配置环境变量 按住WindowsR 打开运行窗口 输入 sysdm.cpl 打开系统属性——》高级—…

华为机试题:HJ102 字符统计(python)

文章目录(1)题目描述(2)Python3实现(3)知识点详解1、input():获取控制台(任意形式)的输入。输出均为字符串类型。1.1、input() 与 list(input()) 的区别、及其相互转换方…

【Redis】Redis分片集群

【Redis】Redis分片集群 文章目录【Redis】Redis分片集群1. 搭建分片集群1.1 分片集群结构1.2 搭建分片集群1.2.1 集群结构1.2.2 准备实例和配置1.2.3 启动1.2.4 创建集群1.2.5 测试2. 散列插槽2.1 总结3. 集群伸缩4. 故障转移4.1 数据迁移5. RedisTemplate访问分片集群1. 搭建…

GEE开发之ERA5(气温、降水、压力、风速等)数据获取和分析

GEE开发之ERA5(气温、降水、压力、风速等)数据获取和分析1.ERA5介绍2.初始ERA5数据2.1 DAILY代码2.2 MONTHLY代码3.遥感影像查看(DAILY之mean_2m_air_temperature)4.逐日数据分析和获取(以mean_2m_air_temperature为例)5.逐月数据…