qt5-入门
参考:
qt学习指南
Qt5和Qt6的区别-CSDN博客
Qt 学习之路_w3cschool
Qt教程,Qt5编程入门教程(非常详细)
本地环境:
win10专业版,64位
技术选择
Qt5力推QML界面编程。QML类似HTML,可以借助CSS进行美化,借助JavaScript进行交互。不同平台下的QML有相同的渲染机制,界面效果一致。不过大部分时候还是要使用C++
Qt6主推QML,但是似乎有坑,不要碰。(知乎一些答案说的)
Qt5支持win7,5.12是LTS(长期支持),因此综合考虑使用Qt5.12(项目需要)
基础知识
观察者模式
Observer Pattern,也称为发布订阅模式。就是对象之间是一对多,当一个对象改变状态时,所有依赖于它的对象都会得到通知(信号)并自动更新。
- subject:被观察者,包含观察者列表(所有被观察的)、添加、删除和通知观察者的方法
- observer:观察者,包含接受消息并更新的方法
- ConcreteSubject:具体的被观察者,可以包含自己的业务逻辑,同时定义对哪些事件进行通知
- ConcreteObserver:具体的观察者,可以包含自己的业务逻辑,同时对应接受消息猴的处理逻辑
不过观察者有时候也可以是被观察者。
信号槽
信号槽可以将程序中的各个对象进行解耦
当某个事件发生后,sender会发出一个signal,这是一种广播,如果有receiver对这个信号感兴趣,它就会通过connect(连接函数),用自己的一个slot(槽函数)来处理这个信号。slot是自动调用的。
connect(sender, signal, receiver, slot);
// slot是接收到信号之后需要调用的函数
原生信号槽:Qt为每一个Object都预先写好了一些信号和槽函数
也可以自定义信号槽,需要:
- sender和receiver需要继承QObject,同时在类定义第一行写上Q_OBJECT
- sender要写信号函数
- 放在 signals: 标记下
- 是返回值void的函数,不需要实现(因为只表示一个信号)
- receiver要写槽函数,
- 放在 public slots: 标记下(当然可以换private protected)
- 是普通成员函数
- MainWindow要继承QMainWindow,同时在类声明第一行写上Q_OBJECT,并且写好对象的指针,再声明一个函数,用来发起信号(触发一个状态,比如 emit xx- >say() )
- MainWindow的实现中要创建sender和receiver对象,然后用connect函数连接,最后触发
使用lambda表达式写槽函数
lambda表达式可以像对象一样使用,可以赋给变量或者作为参数传递,也可以像函数一样求值,同时执行完毕会自动释放内存,可以达到随时随地使用的效果。格式为:
[capture](parameters)specifiers -> return_type { body }
lambda函数 这里 写过
specifiers是可选的,比如下面这个函数,本身按lambda的写法是只读的,如果想要修改的话,可以把specifiers写成mutable,此时可以修改副本的值,不过该变量的值还是不变的
auto a2 = [Value](int x) mutable {Value++;};
如果返回值是void或者函数体只有一处return,那么可以省略return_type
事件
将事件抽象为一个对象,当用户发起一个行为,就把对应的事件加入事件队列,对于系统来说,每次只要处理事件队列里未处理的事件就可以了;如果没用事件,程序就阻塞,不执行任何代码。
必要时,Qt的事件也可以不进入事件队列,直接处理。
与信号的区别:信号一旦发出,对应的槽函数一定会被执行,但是事件可以使用事件过滤器进行过滤。
如果要使用事件,只要让类继承QWidget类及其子类(里面定义了很多protected virtual函数),然后再重写事件回调函数即可。
第一个Qt程序
下载安装不提,北大那边找不到5.12版本,我是在官网找的,用迅雷下的。安装完成后,在qt\Qt5.12.0\Tools\QtCreator\bin下找到Qt Creator,新建一个项目。勾选创建界面,此时Forms文件夹下有一个mainwindow.ui,是当前的界面。

其中.pro是项目文件、配置信息,是告诉qmake如何创建makefile的。Headers下放头文件,Sources下面放cpp文件,Forms下放窗口的设计实现。
点击ui文件可以进入设计页面,此时可以拖动左侧的空间,修改窗口的外观。

看一下ui文件的源代码,可以看到是xml格式(一堆标签),红圈部分对应的是我拖动和调过格式的Hello World。

运行效果:

文件解释
// mainwindow.h
#ifndef MAINWINDOW_H
#define MAINWINDOW_H#include <QMainWindow>class MainWindow : public QMainWindow
{Q_OBJECTpublic:MainWindow(QWidget *parent = 0);~MainWindow();
};#endif // MAINWINDOW_H// mainwindow.cpp
#include "mainwindow.h"MainWindow::MainWindow(QWidget *parent): QMainWindow(parent)
{
}MainWindow::~MainWindow()
{}// main.cpp
#include "mainwindow.h"
#include <QApplication>int main(int argc, char *argv[])
{QApplication a(argc, argv);// 填充代码 开始MainWindow w; w.show();// 填充代码 结束return a.exec();
}
- 需要记住的是,只要是使用Qt框架编写的、带界面的应用程序,main()中必须包含QApplication a(argc, argv);和return a.exec();两句
- MainWindow继承自QMainWindow,所以也是一个主窗口
- 默认情况下,Qt提供的所有组件都是隐藏的,需要使用show方法才能显示
用代码添加控件
假设在创建新项目时,去掉创建界面的勾选,那么新项目将没有Forms文件夹,也没有ui文件,此时设计按钮也是禁用的。
此时修改mainwindow.h,
#include <QLabel>class MainWindow : public QMainWindow
{Q_OBJECTpublic:MainWindow(QWidget *parent = 0);~MainWindow();
private:QLabel *lab;
};
再修改mainwindow.cpp的构造函数:
MainWindow::MainWindow(QWidget *parent): QMainWindow(parent)
{this->lab = new QLabel("Hello World", this);
}
运行结果如下:

相关文章:
qt5-入门
参考: qt学习指南 Qt5和Qt6的区别-CSDN博客 Qt 学习之路_w3cschool Qt教程,Qt5编程入门教程(非常详细) 本地环境: win10专业版,64位 技术选择 Qt5力推QML界面编程。QML类似HTML,可以借助CSS进…...
【重磅发布】已开放!模型师入驻、转格式再升级、3D展示框架全新玩法…
1月23日,老子云正式发布全新版本。此次新版本包含多板块功能上线和升级,为用户带来了含模型师入驻、三维格式在线转换升级、模型免费增值权益开放、全新3D展示框架等一系列精彩内容! 1月23日,老子云正式发布全新版本。此次新版本…...
Qt 基础之QDataTime
Qt 基础之QDataTime 引言一、获取(设定)日期和时间二、时间戳三、时间计算 (重载运算符) 引言 QDataTime是Qt框架中用于处理日期和时间的类。它提供了操作和格式化日期、时间和日期时间组合的功能。QDataTime可以用于存储和检索日期和时间、比较日期和时间、对日期和时间执行算…...
美国将限制中国,使用Azure、AWS等云,训练AI大模型
1月29日,美国商务部在Federal Register(联邦公报)正式公布了,《采取额外措施应对与重大恶意网络行为相关的国家紧急状态》提案。 该提案明确要求美国IaaS(云服务)厂商在提供云服务时,要验证外国…...
智能指针|巨巨巨详细
智能指针 shared_ptrshared_ptr的基本用法使用shared_ptr要注意的问题 unique_ptr独占的智能指针weak_ptr弱引用的智能指针weak_ptr的基本用法weak_ptr返回this指针weak_ptr解决循环引用问题 weak_ptr使用注意事项 智能指针 C程序设计中使用堆内存是非常频繁的操作࿰…...
硬件知识(2) 手机的传感器-sensor
#灵感# 看看小米在干啥 手机型号:Redmi Note 13 Pro,解读一下它宣传的手机卖点。 目录 宣传1:1/1.4" 大底,f/1.65 大光圈, 宣传2:支持 2 亿像素超清直出,分辨率高达 16320 x 12240 宣…...
Kotlin快速入门系列9
Kotlin对象表达式和对象声明 对象表达式 有时,我们想要创建一个对当前类有些许修改的对象同时又不想重新声明一个子类。如果是Java,可以用匿名内部类的概念来解决这个问题。kotlin的对象表达式和对象声明就是为了实现这一点(创建一个对某个类做了轻微改…...
nginx+nginx-rtmp-module+ffmpeg进行局域网推流rtmp\m3u8
局域网推流的简单方式 这里以ubuntu为例 一、先下载安装包 nginx、nginx-rtmp-module,再一起安装 # 下载nginx # 这里我安装的是 nginx-1.10.3 版本 cd /usr/software wget http://nginx.org/download/nginx-1.25.0.tar.gz tar -zxvf nginx-1.25.0.tar.gz# 下载ng…...
PMP备考笔记:模拟考试知识点总结
1. 答题思路:优先看问题,可节省时间。 2. 考试就按照考试的套路来做,不要过多考虑。 开发团队只专注当前冲刺目标,产品负责人对PB排优先级。 收集需求工具-原型法:能够让用户提前体验,减少返工的风险。 …...
docker程序镜像的安装
目录 一、流程 二、总结 一、 流程 对文中脚本测试前提默认系统已安装docker docker程序部署命令脚本 加载已打包的docker程序 docker load < sto...p.tar创建网络 名称为c…m子网subnet 172.27.16.1/24网关gateway 172.27.16.254-d 指定网络驱动程序 docker network cre…...
openssl3.2 - .pod文件的查看方法
文章目录 .pod文件的查看方法概述笔记初步的解决方法备注 - pod2html.bat的详细用法好像Perl就自带这个BATEND .pod文件的查看方法 概述 看到openssl源码目录下有很多.pod文件, 软件发布的帮助内容都在里面. 当make install后, 大部分的.pod都会转成html文件, 但是有一部分…...
力扣238. 除自身以外数组的乘积(前后缀和)
Problem: 238. 除自身以外数组的乘积 文章目录 题目描述思路复杂度Code 题目描述 思路 思路1: 1.先求取数组的包括当前下标值得前后缀乘积(利用两个数组记录下来分别为leftProduct和rightProduct) 2.当求取一个下标为i的数组中的元素&#x…...
Java玩转《啊哈算法》排序之快速排序
心无挂碍,无挂碍故,无有恐怖,远离颠倒梦想,究竟涅槃。 地图 引子代码地址快速排序核心代码优劣完整代码演示 课后习题 引子 搭嘎好!本人最近看的《啊哈算法》这本书写的确实不错,生动形象,在保…...
静态代理IP该如何助力Facebook多账号注册运营?
在Facebook运营中,充分利用静态代理IP是多账号运营的关键一环。通过合理运用静态代理IP,不仅可以提高账号安全性,还能有效应对Facebook的算法和限制。以下是这些关键点,可以帮助你了解如何运用静态代理IP进行Facebook多账号运营&a…...
npm 淘宝镜像正式到期
由于node安装插件是从国外服务器下载,如果没有“特殊手法”,就可能会遇到下载速度慢、或其它异常问题。 所以如果npm的服务器在中国就好了,于是我们乐于分享的淘宝团队干了这事。你可以用此只读的淘宝服务代替官方版本,且同步频率…...
【Spring Boot 3】【@Scheduled】多线程执行定时任务
【Spring Boot 3】【@Scheduled】多线程执行定时任务 背景介绍开发环境开发步骤及源码工程目录结构总结背景 软件开发是一门实践性科学,对大多数人来说,学习一种新技术不是一开始就去深究其原理,而是先从做出一个可工作的DEMO入手。但在我个人学习和工作经历中,每次学习新…...
TypeScript 基础学习
TypeScript是具有类型语法的JavaScript。 是JavaScript超集,可以编译为纯JavaScript,构建安全可靠的代码,进行类似 babel 的转换。 一种基于JavaScript的强类型、静态的编程语言,提供了类型检测的工具。 特性: 易读…...
《CSS3》田字网格背景(外实线内虚线)的实现
一、前言 记录一些有趣的CSS实现方式,总所周知,当一段效果可以通过CSS实现的时候,绝不使用Javascript来实现,因此记录一些有意思的CSS效果,一来是方便自己学习,另一来是方便以后在需要使用到的时候能快速找…...
图书管理系统(ArrayList和LinkedList)--versions3.0
目录 一、项目要求: 二、项目环境 三、项目使用的知识点 四、项目代码 五、项目运行结果 六、项目难点分析 图书管理系统--versions1.0: 图书管理系统--versions1.0-CSDN博客文章浏览阅读981次,点赞29次,收藏17次。本文使用…...
游戏开发丨基于Pygame的AI版贪吃蛇小游戏
文章目录 写在前面需求分析程序设计程序分析运行结果系列文章写在后面 写在前面 本期内容 基于pygame的AI版贪吃蛇小游戏 所需环境 pythonpycharm或anacondapygame 下载地址 https://download.csdn.net/download/m0_68111267/88789665 需求分析 本游戏使用Pygame模块开…...
接口测试中缓存处理策略
在接口测试中,缓存处理策略是一个关键环节,直接影响测试结果的准确性和可靠性。合理的缓存处理策略能够确保测试环境的一致性,避免因缓存数据导致的测试偏差。以下是接口测试中常见的缓存处理策略及其详细说明: 一、缓存处理的核…...
DockerHub与私有镜像仓库在容器化中的应用与管理
哈喽,大家好,我是左手python! Docker Hub的应用与管理 Docker Hub的基本概念与使用方法 Docker Hub是Docker官方提供的一个公共镜像仓库,用户可以在其中找到各种操作系统、软件和应用的镜像。开发者可以通过Docker Hub轻松获取所…...
Python实现prophet 理论及参数优化
文章目录 Prophet理论及模型参数介绍Python代码完整实现prophet 添加外部数据进行模型优化 之前初步学习prophet的时候,写过一篇简单实现,后期随着对该模型的深入研究,本次记录涉及到prophet 的公式以及参数调优,从公式可以更直观…...
跨链模式:多链互操作架构与性能扩展方案
跨链模式:多链互操作架构与性能扩展方案 ——构建下一代区块链互联网的技术基石 一、跨链架构的核心范式演进 1. 分层协议栈:模块化解耦设计 现代跨链系统采用分层协议栈实现灵活扩展(H2Cross架构): 适配层…...
【Go】3、Go语言进阶与依赖管理
前言 本系列文章参考自稀土掘金上的 【字节内部课】公开课,做自我学习总结整理。 Go语言并发编程 Go语言原生支持并发编程,它的核心机制是 Goroutine 协程、Channel 通道,并基于CSP(Communicating Sequential Processes࿰…...
ETLCloud可能遇到的问题有哪些?常见坑位解析
数据集成平台ETLCloud,主要用于支持数据的抽取(Extract)、转换(Transform)和加载(Load)过程。提供了一个简洁直观的界面,以便用户可以在不同的数据源之间轻松地进行数据迁移和转换。…...
SpringTask-03.入门案例
一.入门案例 启动类: package com.sky;import lombok.extern.slf4j.Slf4j; import org.springframework.boot.SpringApplication; import org.springframework.boot.autoconfigure.SpringBootApplication; import org.springframework.cache.annotation.EnableCach…...
基于matlab策略迭代和值迭代法的动态规划
经典的基于策略迭代和值迭代法的动态规划matlab代码,实现机器人的最优运输 Dynamic-Programming-master/Environment.pdf , 104724 Dynamic-Programming-master/README.md , 506 Dynamic-Programming-master/generalizedPolicyIteration.m , 1970 Dynamic-Programm…...
html-<abbr> 缩写或首字母缩略词
定义与作用 <abbr> 标签用于表示缩写或首字母缩略词,它可以帮助用户更好地理解缩写的含义,尤其是对于那些不熟悉该缩写的用户。 title 属性的内容提供了缩写的详细说明。当用户将鼠标悬停在缩写上时,会显示一个提示框。 示例&#x…...
佰力博科技与您探讨热释电测量的几种方法
热释电的测量主要涉及热释电系数的测定,这是表征热释电材料性能的重要参数。热释电系数的测量方法主要包括静态法、动态法和积分电荷法。其中,积分电荷法最为常用,其原理是通过测量在电容器上积累的热释电电荷,从而确定热释电系数…...
