Qt creator中操作QAction加入QToolBar

article/2025/10/11 0:36:35

背景:

个人笔记。

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

早先接手的项目中用到了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://chatgpt.dhexx.cn/article/Il7E2svh.shtml

相关文章

Qt学习:QAction系列详解

一、QAction类详解 【详细描述】 QAction类提供了抽象的用户界面action,这些action可以被放置在窗口部件中。 应用程序可以通过菜单,工具栏按钮以及键盘快捷键来调用通用的命令。由于用户期望每个命令都能以相同的方式执行,而不管命令所使用的…

QAction、QWidgetAction、QActionGroup

QAction 一、描述 在应用程序中,可以通过菜单、工具栏按钮和键盘快捷键调用许多常用命令。由于用户希望每个命令都以相同的方式执行,因此无论使用何种用户界面,将每个命令表示为一个动作是很有用的。 二、类型成员 1、enum QAction::Acti…

QAction类详解

QAction类提供了抽象的用户界面action,这些action可以被放置在窗口部件中。 应用程序可以通过菜单,工具栏按钮以及键盘快捷键来调用通用的命令。由于用户期望每个命令都能以相同的方式执行,而不管命令所使用的用户界面, 这…

Qt 动作(QAction)

Qt 使用QAction类作为动作,QAction包含了图标、菜单文字、快捷键、状态栏文字、浮动帮助等信息,Qt自己选择使用哪个属性来显示,无需我们关心。同时,Qt 能够保证把QAction对象添加到不同的菜单、工具栏时,显示内容是同步的。也就是说&#xff…

Qt扫盲-QAction理论总结

QAction理论总结 一、概述二、使用 一、概述 在应用程序中,许多常用命令可以通过 菜单、工具栏按钮 和 键盘快捷键 调用。由于用户希望以相同的方式执行每个命令,而不管使用什么用户界面,因此将每个命令表示为一个Action操作是有效的。可以将…

QAction系列详解

【详细描述】 QAction类提供了抽象的用户界面action,这些action可以被放置在窗口部件中。 应用程序可以通过菜单,工具栏按钮以及键盘快捷键来调用通用的命令。由于用户期望每个命令都能以相同的方式执行,而不管命令所使用的用户界面&#xff…

Python爬虫js处理

一、jquery发送ajax请求格式 """ 形式:$.ajax({name:val, name:val,...}); 可选字段: 1)url:链接地址,字符串表示 2)data:需发送到服务器的数据,GET与POST都可以&am…

爬虫中遇到的js反爬技术

现在的网页代码搞得越来越复杂,除了使用vue等前端框架让开发变得容易外,主要就是为了防爬虫,所以写爬虫下的功夫就越来越多。攻和防在互相厮杀中结下孽缘却又相互提升着彼此。 本文就JS反爬虫的策略展开讨论,看看这中间都有着怎样…

Python爬虫之路-JS的解析

JS的解析 学习目标: 了解 定位js的方法了解 添加断点观察js的执行过程的方法应用 js2py获取js的方法 1 确定js的位置 对于前面人人网的案例,我们知道了url地址中有部分参数,但是参数是如何生成的呢? 毫无疑问,参数肯…

nodejs 爬虫

目标:爬取百度搜索到的女生头像(百度图片通用) 1. 下载node 可以去官网下载最新版node.js安装程序。(地址:node官网) 2. 下载需要的依赖(模块) 这里需要用到superagent模块和nod…

JS逆向爬虫(一)

目录 需要做的事情 一、安装与配置文档 1、node.js安装与配置 2、VSCode安装 3、在VSCode中运行 二、JS常用算法 1、md5 线性散列算法 2、DES/AES对称加密算法 3、RSA 非对称加密算法 4、base64 伪加密算法 三、js逆向案例 1、有道笔记翻译(MD5) 进行js代码调试的流…

爬虫中js的解析

每日分享: 做人要狠 任何关系,合得来就合,合不来就散,没有什么大不了的,理解多了,迁就多了,顾忌多了,痛苦自然就多了,完全没这个必要。别说我狠,以前我比谁…

Node.js爬虫实战:如何快速获取网站数据?

思考🤔 假设你正在为公司做市场调研,你需要获得一些能够提供关于你的目标受众的信息以进行研究,但是你发现这些信息并不能直接获取。你人工地搜索每个网站是不现实的,所以你需要一种更高效、更自动化、更快速的方式来获取这些信息…

Python爬虫:抓取js生成的数据

之前的NLP课程作业要求爬取一些科技新闻来训练语言模型,本文就简单来说一说用Python来爬取新闻的过程。虽然以前写过简单的爬虫,但是没有处理过浏览器动态加载数据的情况,这次碰到了就记录一下。 这次爬取的新闻来源是 新浪科技滚动新闻&…

js爬虫

互联网 Web 就是一个巨大无比的数据库,但是这个数据库没有一个像 SQL 语言可以直接获取里面的数据,因为更多时候 Web 是供肉眼阅读和操作的。如果要让机器在 Web 取得数据,那往往就是我们所说的“爬虫”了。现在项目需要,所以研究…

爬虫JS逆向思路 --(几千块钱都学不到的思路)

网络上几千块都学不到的JS逆向思路这里全都有👏🏻👏🏻👏🏻 本系列持续更新中,三连关注不迷路👌🏻 干货满满不看后悔👍👍👍 &…

手把手操作JS逆向爬虫入门(一)

本文爬取的网站如下(可以找解密工具解码) aHR0cHM6Ly9uZXdyYW5rLmNuLw 爬取的内容为网站的资讯情报版块的新闻资讯 鼠标点击翻页,在开发者工具中查看请求包,很容看出请求地址和参数, 其中post请求的参数如图&#x…

JS实现图片爬虫

最近在在学node.JS,尝试着跟着网上的教程学着写一个JS爬虫,来爬取网上的图片文件,在此记录过程 获取网站的html结构 首先我们引入node.js的http核心模块,初始化并将目标网站地址作为url参数,接受一个回调函数,在这个…

从零开始学JS爬虫,轻松抓取网页数据!

随着互联网的发展,网页已经成为人们获取信息的重要途径之一。而如何高效地获取所需信息,就成为了很多人关注的问题。本文将介绍JS爬虫入门,帮助读者从零开始抓取网页数据。 一、概述 在介绍JS爬虫之前,我们先来了解一下爬虫的基…

爬虫之JS的解析

JS的解析 学习目标: 了解 定位js的方法了解 添加断点观察js的执行过程的方法应用 js2py获取js的方法 1 确定js的位置 对于前面人人网的案例,我们知道了url地址中有部分参数,但是参数是如何生成的呢? 毫无疑问,参数肯…