Qt入门(二):第一个Qt项目

ops/2024/11/15 4:56:06/

新建项目

打开Qt Creator,新建项目,然后一路next
在这里插入图片描述
在这里插入图片描述

到这一步baseclass有三种选择:

  • QMainWindow:主窗口基类,相较于QWidget,多了菜单栏等杂七杂八的东西。
  • QWidget:最基础的窗口基类,QMainWindow和QDialog都是它的子类
  • QDialog:对话窗基类

下面的widget.ui是UI文件。
选QWidget,接着一路next
完成后,直接ctrl+R,构建,就能看到项目的窗口了

如果中间出现什么问题,例如not suitable toolkit之类的,自行解决,搞不好证明C++还没学好,先去学C++。

项目架构

几个重要的类:

  • QApplication:Qt中的核心类,用于自动处理事件循环,全局设置等事项,每个项目都要用,可以看作是Qt初始化。
  • Widget:这个就是前面自己命名的类,就是自己的主窗口类
  • QWidget:构件基类,所有构件都继承这个类,这个类又继承于QObject类,
#include "widget.h"#include <QApplication>int main(int argc, char *argv[])
{QApplication a(argc, argv); //Qt提供的核心类,实现事件循环,全局设置等功能,所有程序都要用到。Widget w;w.show(); //用于更新窗口显示return a.exec(); //启动事件循环
}

UI文件:widget.ui,这个文件不能直接修改,是在”设计“中可视化修改的,双击widget.ui文件,会自动进入设计模式。
在这里插入图片描述
设计模式下可以进行构件拖拽,大致流程就是:拖进去需要的构件,右侧属性框里改一下名字,几个构件想要对齐的时候,可以选中多个,然后点击上面的布局(就显示框上面那几个蓝色方块)
在这里插入图片描述

构件可以通过右键,修改样式表进行美化,Qt的样式表和CSS基本一致。还可以添加图像文件,用作background或者icon

到此,一个毫无用处的界面就OK了。

控制逻辑

信号与槽

Qt中的信号与槽机制是非常重要的事件通信机制。

  • 信号(signals):发生事件时发出信息,QPushButton有clicked()信号,当被点击时发出。
  • 槽(slots):用来相应信号的函数办法(类似于回调函数或者hook),当信号发出时,函数被调用。

在这里插入图片描述
可以直接在UI文件设计界面下面添加信号和槽。还可以用以下代码方式连接:

  • QObject::connect
  • Lambda表达式
  • 函数指针
  • 自动生成槽函数

Qt中还可以自定义信号和槽函数,定义信号函数的时候前面要加signals关键字(信号函数只需要声明,不需要实现,信号函数的输入会传递给槽函数),定义槽函数前面要加slots关键字,发射信号即emit mySignal(123),这样就可以触发槽函数了。

Qt中所有事情都是围绕构件展开的,信号和槽也不例外,定义信号和槽函数也都是构件的成员函数,连接的时候也是要指定信号是由哪个对象发出的哪个信号函数,哪个对象用哪个槽函数接收这个信号。

事件机制

Qt中所有的通信都是基于事件来进行的,用户的所有操作都是事件,即使只是挪动了一下鼠标,还有一些事件是系统自动发出的,例如定时器。
Qt中一个事件的处理过程:事件产生->事件派发->事件过滤->事件分发->事件处理

信号与槽是一种特殊的事件
感觉Qt有点像一个大的状态机,每一个事件就是一次状态的转移。

  • 事件派发:QApplication将事件分发到指定构件
  • 分发过程中可以采用过滤器对事件进行过滤,默认不过滤
  • 分发到指定构件后,事件分发器根据事件类型分配给指定的处理函数

Qt主要内容大概也就这样,麻雀虽小,五脏俱全,掌握UI设计,信号槽机制,事件机制,已经足够实现简单的APP了。


http://www.ppmy.cn/ops/93274.html

相关文章

用Python制作开心消消乐游戏|附源码

制作一个完整的“开心消消乐”风格的游戏在Python中是一个相对复杂的项目&#xff0c;因为它涉及到图形界面、游戏逻辑、动画效果以及用户交互等多个方面。不过&#xff0c;我可以为你提供一个简化的版本和概念框架&#xff0c;帮助你理解如何开始这个项目&#xff0c;并提供一…

SAP MIGO新增字段 自定义字段(续)

继 SAP MIGO新增字段 自定义字段_migo 新增字段-CSDN博客后&#xff0c;实际业务实用提出了新的需求 再0200屏幕的上输入&#xff0c;但是发现回车后就清空了&#xff0c;直接过账也不行。 于是 找了好几个顾问&#xff0c;ABAP 之外还找了MM顾问 都说没有实现过。 就在准备放…

C++解析和构建json(cjson使用手册)

C解析和构建json【cjson使用手册】 一、cjson下载二、cjson工程使用2.1 静态库使用2.1 源码使用&#xff08;推荐&#xff09; 三、cjson详解3.1 解析json字符串3.1.1 解析对象3.1.2 解析数组&#xff1a;方法一&#xff08;获取列表数量然后按照位置获取&#xff09;3.1.2 解析…

《Kotlin核心编程》2021版复习记录

目录 0 前言1 基础语法1.1 数据类型1.2 数组1.3 集合1.4 遍历数据和集合1.5 函数声明返回值类型1.6 var 和 val 2 高阶函数和lambda表达式2.1 高阶函数2.2 方法和成员引用2.3 链式调用2.4 扩展函数2.5 面向表达式编程2.5.1 when表达式2.5.2 for循环2.5.3 in 2.6 字符串相等 3 面…

PixelLib图像分割

文章目录 前言一、PixelLib依赖安装二、实例模型训练 前言 图像分割就是把图像分成若干个特定的、具有独特性质的区域并提出感兴趣目标的技术和过程。它是由图像处理到图像分析的关键步骤。 传统的图像分割方法主要分以下几类&#xff1a;基于阈值的分割方法、基于区域的分割…

【MySQL】事务——事务隔离等级、隔离级别、查看与设置隔离性、读未提交、读提交、可重复读、串行化、一致性、读-写、MVCC、当前读和快照、RR和RC本质区别

文章目录 MySQL3. 事务隔离等级3.1 什么是事务隔离等级3.2 隔离级别3.3 查看与设置隔离性3.4 读未提交【Read Uncommitted】3.5 读提交【Read Committed】3.6 可重复读【Repeatable Read】3.7 串行化【serializable】3.8 一致性【Consistency】 4. 读-写4.1 三个记录隐藏列字段…

python spyne报No module named ‘http.cookies‘的解决

python spyne报No module named ‘http.cookies’ python实现webservice服务端时&#xff0c;会使用spyne这个库&#xff0c;安装后&#xff0c;运行会提示No module named ‘http.cookies’。 尝试过不行的方法 pip install http.cookiespip install http.cookiejar 可行的…

MATLAB中cdf2rdf函数用法

目录 语法 说明 示例 将复数对角矩阵变换为实数块对角矩阵 cdf2rdf函数的功能是将复数对角型转换为实数块对角型。 语法 [Vnew,Dnew] cdf2rdf(V,D) 说明 ​[Vnew,Dnew] cdf2rdf(V,D) 将实矩阵 X 的 [V,D] eig(X) 或 [V,D] eigs(X,___) 的输出从复数对角型转换为实数…