qt开发从入门到实战2
以下是本人学习笔记
原视频:最新QT从入门到实战完整版|传智教育
qt开发从入门到实战1
练习示例
设计一个按钮,点击时弹出新窗口,再次点击时新窗口关闭
// exerciseQWidget* second_window = new QWidget();QPushButton* btn3 = new QPushButton("open", this);btn3->move(0, 100);connect(btn3, &QPushButton::clicked, second_window, [=](){if(btn3->text() == "open"){second_window->show();second_window->resize(100, 100);btn3->setText("close");}else if(btn3->text() == "close"){second_window->close();btn3->setText("open");}});
注意:加入窗口和加入对象树是两个不同的概念
一、窗口中的基础部件
1.创建菜单栏
讲解见注释
// 创建菜单栏
// 菜单栏最多只有一个
// menuBar构造函数已经把自身加入对象树了
QMenuBar* bar = menuBar();
// 将菜单栏放入窗口
setMenuBar(bar);
// 创建菜单
QMenu* fileMenu = bar->addMenu("file");
QMenu* editMenu = bar->addMenu("edit");
// 创建菜单项
QAction* newAction = fileMenu->addAction("new");
// 添加分隔线
fileMenu->addSeparator();
QAction* openAction = fileMenu->addAction("open");
2.创建工具栏
// 工具栏可以有多个
QToolBar* toolBar = new QToolBar(this); // 加入对象树
// 加入窗口和加入对象树是两个不同的概念
addToolBar(Qt::LeftToolBarArea ,toolBar); // 加入窗口
// 设置工具栏是否可以移动(相当于总开关)
toolBar->setMovable(false);
// 设置工具栏只可以左右停靠
toolBar->setAllowedAreas(Qt::LeftToolBarArea | Qt::RightToolBarArea);
toolBar->setFloatable(false);
// 设置工具栏内容
// 相当于工具栏和菜单栏公用的功能
toolBar->addAction(newAction);
toolBar->addAction(openAction);
// 工具栏中添加控件
QPushButton* btn = new QPushButton("aa", this);
toolBar->addWidget(btn);
3.创建状态栏
// 状态栏最多只有一个
QStatusBar* stBar = statusBar();
// 将状态栏放入窗口
setStatusBar(stBar);
// 放标签控件
QLabel* label1 = new QLabel("tips", this);
stBar->addWidget(label1);
QLabel* label2 = new QLabel("right tips", this);
// right labels
stBar->addPermanentWidget(label2);
4.创建铆接部件(浮动窗口)+中心部件
// 创建铆接部件(浮动窗口):可以有多个
QDockWidget* dockWidget = new QDockWidget("float", this);
// 浮动窗口的位置是相对于核心部件的位置而言的(在核心部件的上/下/左/右)
addDockWidget(Qt::TopDockWidgetArea, dockWidget);
// 设置后期停靠区域:只允许上下
dockWidget->setAllowedAreas(Qt::TopDockWidgetArea | Qt::BottomDockWidgetArea);
5.创建中心部件
// 设置中心部件:只有一个
QTextEdit* edit = new QTextEdit(this);
setCentralWidget(edit);
0.无代码版
创建项目时勾选创建ui界面,之后在ui中手动拖拽部件(手动狗头)

二、资源文件的添加
利用无代码方式进行控件的布局后,添加的部件在源文件中可以通过ui找到
- 寻找到项目文件位置,将需要用的资源放在项目文件夹中,代码里使用相对路径
- 在Qt项目中,右击项目->添加新文件
- 选择qt->qt resource file(最终生成.qrc文件)

- 命名后默认选项即可
- 添加前缀(仅作区分用)
- 添加文件:全选之前加入项目文件夹的图片即可
注意:
- 从res.qrc切出后,双击文件无法唤起页面,需要右击res.qrc->open in editor
- 图片资源必须得是png格式,不然会不显示图片
三、对话框
1.模态/非模态对话框
// 点击新建按钮,弹出一个对话框connect(ui->newAction, &QAction::triggered, [=](){// 对话框分类// 1.模态对话框:不可以对其他窗口进行操作// 2.非模态对话框:可以对其他窗口进行操作// 模态创建(阻塞)QDialog dlg1(this);dlg1.resize(200, 100);// 在模态对话框关闭之前,程序会一直在此阻塞dlg1.exec();qDebug() << "模态创建";});connect(ui->openAction, &QAction::triggered, [=](){// 非模态对话框创建// 以下方式创建会让对话框在离开匿名函数时就被销毁// QDialog dlg2(this);// dlg2.show();// 将对话框创建在堆上即可QDialog* dlg2 = new QDialog(this);dlg2->resize(200, 100);dlg2->show();// 使其在关闭时删除对象(因为默认只有在主窗口关闭时,所有对象才会被销毁)dlg2->setAttribute(Qt::WA_DeleteOnClose);qDebug() << "非模态对话框创建";});
2.标准对话框
标准对话框是Qt内置的用于简化开发的一系列对话框
消息对话框
// 错误对话框
QMessageBox::critical(this, "critical", "error");
// 信息对话框
QMessageBox::information(this, "information", "some info");
// 提问对话框(父亲, 标题, 内容, 按钮类型, 与回车关联的按钮)
// 返回值是standarButton类型
if(QMessageBox::Save == QMessageBox::question(this, "question", "Q?", QMessageBox::Cancel | QMessageBox::Save, QMessageBox::Save))
{qDebug() << "save something";
}else
{qDebug() << "cancel";
}
// 警告对话框
QMessageBox::warning(this, "warning", "stop!");
tips:静态对象可以通过①创建对象访问②直接通过类名访问
其他对话框
// 其他对话框
// 文件对话框(parent, title, default path, filter file)
QString filePath = QFileDialog::getOpenFileName(this, "open files", "/home", "*.txt");
qDebug() << filePath;// 字体对话框
bool flag;
QFont font = QFontDialog::getFont(&flag, QFont("console", 36));
qDebug() << font;// 颜色对话框(上面两种有warning)
// QColor color = QColorDialog::getColor(QColor(255, 255, 255));
// QColor color = QColorDialog::getColor(Qt::red, this);
QColor color(0, 0, 0);
QColorDialog colorDialog(color, this);
colorDialog.setOption(QColorDialog::DontUseNativeDialog);
if( colorDialog.exec() == QDialog::Accepted )
{// 获取当前选中的颜色color = colorDialog.currentColor();qDebug() << color;
}
3.未完待续
p23
相关文章:
qt开发从入门到实战2
以下是本人学习笔记 原视频:最新QT从入门到实战完整版|传智教育 qt开发从入门到实战1 练习示例 设计一个按钮,点击时弹出新窗口,再次点击时新窗口关闭 // exerciseQWidget* second_window new QWidget();QPushButton* btn3 new QPushBu…...
Android---字节码层面分析Class类文件
Java 提供了一种可以在所有平台上都能使用的一种中间代码---字节码文件(.class文件)。有了字节码,无论是那个平台只要安装了虚拟机都可以直接运行字节码文件。有了虚拟机,解除了 java 虚拟机与 java 代码之间的耦合。 Java 虚拟机当初被设计出来时就不单…...
【2023研电赛】东北赛区一等奖作品:基于FPGA的小型水下无线光通信端机设计
本文为2023年第十八届中国研究生电子设计竞赛东北赛区一等奖作品分享,参加极术社区的【有奖活动】分享2023研电赛作品扩大影响力,更有丰富电子礼品等你来领!,分享2023研电赛作品扩大影响力,更有丰富电子礼品等你来领&a…...
JWT授权为啥要在 Authorization标头里加个Bearer 呢
这是因为 W3C 的 HTTP 1.0 规范,Authorization 的格式是: Authorization: <type> <authorization-parameters> w3c规定,请求头Authorization用于验证用户身份。这就是告诉我们,token应该写在请求头Authorization中 …...
一篇理解TCP协议
一、TCP协议概念。 TCP(Transmission Control Protocol,传输控制协议)是一种面向连接的、可靠的传输层协议。它主要用于在计算机网络中,通过建立可靠的通信连接来进行数据传输。 TCP协议的特点如下: 可靠性…...
rk平台android12系统设置里面互联网选项中的以太网选项点击不了问题
rk平台android12系统中,系统设置中的互联网选项,当连接以太网以后,会显示以太网的选项,但是点击没作用,现在需要点击能够进入到以太网的设置界面,需要添加相关的点击事件。 首先,在packages/apps/Settings/AndroidManifest.xml中的以太网设置配置添加一个action,用于打…...
ctrl+d和ctrl+c的区别
CtrlD和CtrlC都是常用的键盘快捷键,但它们的功能不同。 CtrlD 在不同的操作系统和应用程序中可以有不同的功能。在Unix/Linux系统的命令行终端中,CtrlD的作用是发送EOF(End of File)信号,表示输入结束。在Windows系统中…...
ChatGLM2-6B微调实践
ChatGLM2-6B微调实践 环境准备安装部署1、安装 Anaconda2、安装CUDA3、安装PyTorch4、安装 ChatGLM2-6B 微调实践1、准备数据集2、安装python依赖3、微调并训练新模型4、微调后模型的推理与评估5、验证与使用微调后的模型 微调过程中遇到的问题 环境准备 申请阿里云GPU服务器&…...
YOLOv7独家改进FPN系列:结合新颖的 GhostSlimPAN 范式网络结构,进一步提升检测器性能
💡本篇内容:YOLOv7改进FPN系列:结合新颖的 GhostSlimFPN 范式网络结构,进一步提升检测器性能 重点:🔥🔥🔥YOLOv7 使用这个 核心创新点 在数据集改进做实验:即插即用: 当 Slim 遇到 YOLO 系列 💡🚀🚀🚀本博客 YOLO系列 + 改进源代码改进 适用于 YOLOv7…...
12. Java异常及异常处理处理
Java —— 异常及处理 1. 异常2. 异常体系3. 常见Exception4. 异常处理4.1 try finally catch关键字4.2 throws和throw 自定义异常4.3 finally,final,finalize三者的区别 1. 异常 异常:在程序执行过程中发生的意外状况,可能导致程…...
自定义hooks函数
体会1 1、js文件中定义useXX函数 export function usetestY() {const count ref(10);const doubleCount computed(() > count.value * 2);return {count,doubleCount,}; } 2、在vue文件中使用useXX函数 import { usetestY } from ./data;const { count, doubleCount } …...
Linux系统及Docker安装RabbitMq
目录 一、linux系统安装 1、上传文件 2、在线安装依赖环境 3、安装Erlang 4、安装RabbitMQ 5、开启管理界面及配置 6、启动 7、删除mq 二、docker安装 1、上传mq.tar包或使用命令拉取镜像 2、启动并运行 3、访问mq 一、linux系统安装 1、上传文件 2、在线安装依赖环…...
山东省赛二阶段第一部分解题思路
提交攻击者的IP地址 192.168.1.7 这个直接awk过滤一下ip次数,这个ip多得离谱,在日志里面也发现了它的恶意行为,后门,反弹shell 识别攻击者使用的操作系统 Linux 找出攻击者资产收集所使用的平台 shodan 提交攻击者目…...
WebGoat 靶场 JWT tokens 四 五 七关通关教程
文章目录 webGoat靶场第 四 关 修改投票数第五关第七关 你购买书,让Tom用户付钱 webGoat靶场 越权漏洞 将webgoat-server-8.1.0.jar复制到kali虚拟机中 sudo java -jar webgoat-server-8.1.0.jar --server.port8888解释: java:这是用于执行…...
【单元测试】如何使用 JUnit5 框架?
JUnit5 单元测试框架使用教程 一、Junit5 是什么? Junit5是一个用于在Java平台上进行单元测试的框架。JUnit 5 框架主要由三部分组成:JUnit Platform、JUnit Jupiter 和 JUnit Vintage。 JUnit Platform:定义了测试引擎的 API,是…...
C#封装、继承和多态的用法详解
大家好,今天我们将来详细探讨一下C#中封装、继承和多态的用法。作为C#的三大面向对象的特性,这些概念对于程序员来说非常重要,因此我们将对每个特性进行详细的说明,并提供相应的示例代码。 目录 1. 封装(Encapsulati…...
数据结构与算法(持续更新)
线性表 单链表 单链表的定义 由于顺序表的插入删除操作需要移动大量的元素,影响了运行效率,因此引入了线性表的链式存储——单链表。单链表通过一组任意的存储单元来存储线性表中的数据元素,不需要使用地址连续的存储单元,因此它…...
HDLbits: ece241 2014 q4
module top_module (input clk,input x,output z ); reg [2:0] Q;always(posedge clk)beginQ[0] < Q[0] ^ x;Q[1] < (~Q[1]) & x;Q[2] < (~Q[2]) | x;z < ~(| Q[2:0]); //错误!!!!endendmodule 正确答案…...
LuatOS-SOC接口文档(air780E)-- gmssl - 国密算法
sm.sm2encrypt(pkx,pky,data)# sm2算法加密 参数 传入值类型 解释 string 公钥x,必选 string 公钥y,必选 string 待计算的数据,必选,最长255字节 返回值 返回值类型 解释 string 加密后的字符串, 原样输出,未经HEX转换 例子 local originStr "encryptio…...
【线性代数及其应用 —— 第一章 线性代数中的线性方程组】-1.线性方程组
所有笔记请看: 博客学习目录_Howe_xixi的博客-CSDN博客https://blog.csdn.net/weixin_44362628/article/details/126020573?spm1001.2014.3001.5502思维导图如下: 内容笔记如下:...
K8S认证|CKS题库+答案| 11. AppArmor
目录 11. AppArmor 免费获取并激活 CKA_v1.31_模拟系统 题目 开始操作: 1)、切换集群 2)、切换节点 3)、切换到 apparmor 的目录 4)、执行 apparmor 策略模块 5)、修改 pod 文件 6)、…...
反向工程与模型迁移:打造未来商品详情API的可持续创新体系
在电商行业蓬勃发展的当下,商品详情API作为连接电商平台与开发者、商家及用户的关键纽带,其重要性日益凸显。传统商品详情API主要聚焦于商品基本信息(如名称、价格、库存等)的获取与展示,已难以满足市场对个性化、智能…...
关于iview组件中使用 table , 绑定序号分页后序号从1开始的解决方案
问题描述:iview使用table 中type: "index",分页之后 ,索引还是从1开始,试过绑定后台返回数据的id, 这种方法可行,就是后台返回数据的每个页面id都不完全是按照从1开始的升序,因此百度了下,找到了…...
均衡后的SNRSINR
本文主要摘自参考文献中的前两篇,相关文献中经常会出现MIMO检测后的SINR不过一直没有找到相关数学推到过程,其中文献[1]中给出了相关原理在此仅做记录。 1. 系统模型 复信道模型 n t n_t nt 根发送天线, n r n_r nr 根接收天线的 MIMO 系…...
html-<abbr> 缩写或首字母缩略词
定义与作用 <abbr> 标签用于表示缩写或首字母缩略词,它可以帮助用户更好地理解缩写的含义,尤其是对于那些不熟悉该缩写的用户。 title 属性的内容提供了缩写的详细说明。当用户将鼠标悬停在缩写上时,会显示一个提示框。 示例&#x…...
Fabric V2.5 通用溯源系统——增加图片上传与下载功能
fabric-trace项目在发布一年后,部署量已突破1000次,为支持更多场景,现新增支持图片信息上链,本文对图片上传、下载功能代码进行梳理,包含智能合约、后端、前端部分。 一、智能合约修改 为了增加图片信息上链溯源,需要对底层数据结构进行修改,在此对智能合约中的农产品数…...
【VLNs篇】07:NavRL—在动态环境中学习安全飞行
项目内容论文标题NavRL: 在动态环境中学习安全飞行 (NavRL: Learning Safe Flight in Dynamic Environments)核心问题解决无人机在包含静态和动态障碍物的复杂环境中进行安全、高效自主导航的挑战,克服传统方法和现有强化学习方法的局限性。核心算法基于近端策略优化…...
LINUX 69 FTP 客服管理系统 man 5 /etc/vsftpd/vsftpd.conf
FTP 客服管理系统 实现kefu123登录,不允许匿名访问,kefu只能访问/data/kefu目录,不能查看其他目录 创建账号密码 useradd kefu echo 123|passwd -stdin kefu [rootcode caozx26420]# echo 123|passwd --stdin kefu 更改用户 kefu 的密码…...
Linux nano命令的基本使用
参考资料 GNU nanoを使いこなすnano基础 目录 一. 简介二. 文件打开2.1 普通方式打开文件2.2 只读方式打开文件 三. 文件查看3.1 打开文件时,显示行号3.2 翻页查看 四. 文件编辑4.1 Ctrl K 复制 和 Ctrl U 粘贴4.2 Alt/Esc U 撤回 五. 文件保存与退出5.1 Ctrl …...
LabVIEW双光子成像系统技术
双光子成像技术的核心特性 双光子成像通过双低能量光子协同激发机制,展现出显著的技术优势: 深层组织穿透能力:适用于活体组织深度成像 高分辨率观测性能:满足微观结构的精细研究需求 低光毒性特点:减少对样本的损伤…...
