QT学习笔记(一)——QT基础

article/2025/10/25 0:55:51

QT学习笔记(一)——QT基础

文章目录

  • QT学习笔记(一)——QT基础
  • 前言
  • 一、QT是什么?
  • 二、基础内容
    • 1.pro文件规则及含义
    • 2. Widget头文件
    • 3. QT坐标系的定义
    • 4. QApplication应用程序类
    • 5.按钮:QPushButton
    • 6. 信号和槽
      • 6.1 标准信号和槽
      • 6.2 connect的使用
      • 6.3 自定义信号和槽
      • 6.4 信号和槽的拓展
    • 7.lambda表达式
  • 总结


前言

最近的项目工作需要使用到QT相关的知识内容。本人是QT小白,第一次接触QT,正在努力学习中…更新CSDN文章主要为记录自己的学习进度~

一、QT是什么?

Qt是一个跨平台的C++图形用户界面应用程序框架。它为应用程序开发者提供建立图形界面所需的所有功能。它是完全面向对象的,很容易扩展,并且允许真正的组件编程。

二、基础内容

1.pro文件规则及含义

  1. 注释: 从“#”开始,到这一行结束。
  2. 模块引入: QT += 模块名,表示当前项目引入Qt哪些模块。
  3. 模板变量(TEMPLATE)指定生成makefile的类型。
    ◦ TEMPLATE =app -建立一个应用程序的makefile。(默认值)
    ◦ TEMPLATE =lib - 建立一个库的makefile。
    ◦TEMPLATE = vcapp - 建立一个应用程序的VisualStudio项目文件。
    ◦ TEMPLATE =vclib - 建立一个库的VisualStudio项目文件。
    ◦ TEMPLATE =subdirs -创建一个能够进入特定目录并且为一个项目文件生成makefile并且为它调用make的makefile。
  4. 指定生成的应用程序名: TARGET = NAME
  5. 工程中包含的头文件:HEADERS += *.h
  6. 工程中包含的.ui设计文件:FORMS += *.ui
  7. 工程中包含的源文件:SOURCES += *.cpp
  8. 工程中包含的资源文件:RESOURCES += *.qrc
  9. greaterThan(QT_MAJOR_VERSION, 4): QT += widgets,其含义为如果QT_MAJOR_VERSION大于4需要增加widgets模块。
  10. 配置信息:
    CONFIG用来告诉qmake关于应用程序的配置信息。
    CONFIG += c++11使用c++11的特性

2. Widget头文件

Q_OBJECT :宏,引入qt信号和槽的一个宏

示例:

MyWidget(QWidget *parent = 0);

其中,参数parent是一个窗口指针,代表父窗口对象的指针(用于指定类之间的父子关系),以按钮为例,若想要按钮显示在某窗口上,就要跟该窗口建立起父子关系。
如果parent为0或者NULL,则表示当前窗口对象是个顶层窗口(是在任务栏可以找到的窗口)。

3. QT坐标系的定义

顶层窗口以屏幕的左上角为(0,0)
其他窗口以其父窗口的左上角为(0,0)
坐标轴的正方向为:x轴水平向右,y轴竖直向下

相关的API函数有:

	move(x,y)//移动窗口到父窗口(x,y)坐标resize(w,h)//重新设置窗口的大小width=w,height=hsetFixedSize(w,h)//设置窗口的固定大小width=w,height=hsetWindowTitle(title)//设置窗口标题setGeometry(x,y,w,h)//同时设置窗口位置和大小,相当于move和resize的结合体

4. QApplication应用程序类

示例:

QApplication a(argc, argv);

创建一个QApplication对象,作用是维护qt应用程序生命,每个qt程序有且仅有一个QApplication对象,它也处理应用程序的初始化和结束,并且提供对话管理。

a.exec();

这是一个死循环,在exec()中,Qt接受并处理用户和系统的事件并且把它们传递给适当的窗口部件。是qt程序的生命循环、消息循环。

5.按钮:QPushButton

示例:

QPushButton * btn = new QPushButton; 

创建一个QPushButton对象,依赖于qt的内存管理机制(父对象释放的时候会自动释放各个子对象),可以不进行free/delete操作释放内存。
指定QPushButton对象的父窗口,可以使用setParent()函数或者直接构造函数传参。

6. 信号和槽

基本关系:信号发送者、信号、信号接收者、槽(即信号的处理动作)
注:信号本质是事件,表现形式是函数;槽的本质是对信号的一个处理函数。

6.1 标准信号和槽

利用帮助文档,在QAbstractButton 中就可以找到关键字signals,点击signals索引到系统自带的信号有如下几个:
在这里插入图片描述
clicked:鼠标点击按钮一次,信号就会被触发
pressed:鼠标的左键 | 右键按下,信号就会被触发
released:按钮被释放,信号就会被触发
toggled:在Button状态(开、关)切换时会被触发

6.2 connect的使用

示例:

 conncet(sender,&SenderCLass::signal,receiver,&ReceiverClass::slot);//qt5的用法connect(sender, SIGNAL(signal), receiver, SLOT(slot));//qt4的用法

使用qt4的用法对于信号和槽的函数重载容易区分,qt5的用法更有利于程序错误排查。

6.3 自定义信号和槽

自定义信号

  • 函数声明在类头文件的signals 域下面
  • void 类型的函数,没有返回值
  • 可以有参数,也可以重载
  • 只有声明,没有实现定义
  • 触发信号 emit obj->sign(参数…)

自定义槽

  • 函数声明在类头文件的public/private/protected slots域下面(qt5 可以声明在类的任何位置,可以是静态成员函数、全局函数、lambda表达式)
  • void 类型的函数,没有返回值
  • 可以有参数,也可以重载
  • 不仅有声明,还得有实现

注:使用connect之前要先创建SenderCLass和ReceiverClass的对象以作为信号的发送者和接受者。
若存在函数重载,需要解决参数二义性问题:

  • 使用函数指针赋值,让编译器自动挑选符合类型的函数
  • 使用static_cast 强制转换 ,让编译器自动挑选符合类型的函数

6.4 信号和槽的拓展

  • 一个信号可以连接多个槽
    一个信号建立了多个connect
    那么当信号发射的时候,槽函数的调用顺序是随机的

  • 一个槽可以连接多个信号

  • 信号可以连接信号
    connect(第一个信号发送者,第一个信号,第二个信号发送者,也作为第一个信号的接收者,第二个信号)

  • 信号可以断开连接,使用disconnect函数
    disconnect参数使用方法与connect相同

  • 信号和槽的参数关系,必须同时满足以下两点
    信号和槽函数的参数类型必须对应
    信号和槽函数的参数个数可以不一致,但是信号函数参数个数必须大于等于槽函数参数个数

7.lambda表达式

标准格式:

[capture](parameters) opt ->retType{……;}
  • []:中括号内没有内容,表示lambda表达式不能访问外部函数体的任何局部变量
  • [a]:在函数体内部使用值传递的方式访问a变量
  • [&b]:在函数体内部使用引用传递的方式访问b变量
  • [=]:函数外的所有局部变量都通过值传递的方式使用
  • [&]:函数外的所有局部变量都通过引用的方式使用
  • [=, &a]:a使用引用方式, 其余局部变量是值传递的方式使用
  • [&,a]:a使用值传递方式, 其余局部变量是引用传递的方式使用
  • [this]:在函数内部可以使用类的成员函数和成员变量,=和&形式也都会默认引入

注:值传递的方式捕获的变量默认是const ,若在函数体中需要对该变量进行修改的话要使用 mutable选项

总结

第一篇qt学习笔记结束,撒花~


http://chatgpt.dhexx.cn/article/qGPgMOGs.shtml

相关文章

Qt初学者的一些学习方法、参考资料

1,简介 最近有一些朋友加我,询问Qt入门学习的方法、资料 我基本都一一作答,根据情况给出了一些参考意见 感觉很多新手开始学习时很迷茫,不知道学习哪些方面、看什么资料 这里干脆写一篇文章,把自己的学习过程给大家介…

Qt学习之C++基础

前言 用了大概2个月的时间,学了Qt,然后开发一个小项目,总的来说,在主机GUI程序中,相比Java的Swing和JavaFX,个人感觉Qt的界面设计更加简便一点,灵活性更高一些,然后下边就主要简述一…

Qt学习之Qt基础入门(中)

1. 前言 上一篇博客,总结了Qt的一些基础用法,这篇博客继续跟视频学习Qt的常用方法 Qt入门系列: Qt学习之C基础 Qt学习之Qt安装 Qt学习之Qt基础入门(上) Qt学习之Qt基础入门(中) Qt学习之Qt基础入门(下) 本文原创,创作不易&…

Qt学习之Qt基础入门(上)

1. 前言 上一篇博客,简单的介绍了一下C的面向对象编程,这篇博客就主要是用来入门Qt,废话不多说,开干! Qt入门系列: Qt学习之C基础 Qt学习之Qt安装 Qt学习之Qt基础入门(上) Qt学习之Qt基础入门(中) Qt学习…

qt基础入门教程

1、t的介绍、优点、成功案例 5.8.0 Qt是一个跨平台的C图形用户界面应用程序框架。它为应用程序开发者提供建立艺术级图形界面所需的所有功能。爸是完全面向对象的,很容易扩展,并且允许真正的组件编程。 推荐安装 wps linux 桌面环境 虚拟机软件 屏幕共…

Qt入门教程100篇(已完结)

😈「CSDN主页」:传送门 😈「Bilibil首页」:传送门 😈「CSDN学院」:传送门 😈「本文的内容」:Qt基础教程 😈「动动你的小手」:点赞👍收藏⭐️评论&…

QT入门看这一篇就够了——超详细讲解(40000多字详细讲解,涵盖qt大量知识)

目录 一、Qt概述 1.1 什么是Qt 1.2 Qt的发展史 1.3 Qt的优势 1.4 Qt版本 1.5 成功案例 二、创建Qt项目 2.1 使用向导创建 2.2 一个最简单的Qt应用程序 2.2.1 main函数中 2.2.2 类头文件 2.3 .pro文件 2.4 命名规范 2.5 QtCreator常用快捷键 三、Qt按钮小程序 …

QT入门到实战学习笔记

学习笔记 最新QT从入门到实战完整版|传智教育_哔哩哔哩_bilibili 目录 1.创建一个QT文件 1.1命名规范 1.2快捷键 2QPushButton创建 2.1防止汉语乱码 2.2对象树 2.3Qt窗口坐标体系 3信号和槽机制 3.1自定义信号和槽 3.1.1自定义信号: 3.1.2自定义槽&#…

pdflatex和xelatex的使用差别和建议

关于pdflatex和xelatex的区别的一些注意点 pdflatex 和xelatex分别是什么我遇到的一些问题 pdflatex 和xelatex分别是什么 pdflatex 和xelatex是latex编译中最常用的编译方式,而且效果一般都是比较好的。 PDFLaTeX命令:PDFTeX程序中的命令,用…

关于MAC解决jupyter中出现nbconvert failed/ xelatex not found on path报错

前言 开开心心的花了半个小时做完了2303的期中测试,结果在导出为pdf的时候提示我500错误,说明为nbconvert failed: xelatex not found on path,我当时就蒙了昂,不过还好考试时间是三个小时,还能浪浪,但是我…

【LaTex使用总结】LaTex,pdflatex,xelatex,xetex等的区别和关系

问题是这样产生的,从本科毕设开始接触LaTex起,使用现成的模板进行编译生成操作,一步步按指示操作也从未深究。 后来使用word较多,LaTex经常是简单模板,也渐渐对LaTex的细节不再感兴趣,近期又开始用LaTex撰写…

pyplot 使用 latex 报错:xelatex not found……

错误提示 发生异常: RuntimeError xelatex not found. Install it or change rcParams[pgf.texsystem] to an available TeX implementation. 原始参数: plt.rcParams.update({"pgf.texsystem": "xelatex","text.usetex": True,# u…

Winedt为什么可以用pdfLaTex编译中文(pdfLaTex和XeLaTex的使用)

文章目录 Winedt为什么可以用pdfLaTex编译中文查看Winedt的默认编译器: 1.XeLaTex和pdfLaTex的关系2.Winedt中使用pdfLaTex编译中文的tex3.原因4.验证 Winedt为什么可以用pdfLaTex编译中文 前言:如果你只是想用Winedt实现LaTex中英混排那么可以直接选择…

recipe terminated with fatal error: spawn xelatex enoent.

vscode配置latex的小问题 问题产生的原因是环境变量没有配置好。所以只需要把环境变量配置好就可以了。 1、 打开textlive安装的路径(…\textlive\2022\bin\win32),比如我的就是C:\texlive\2022\bin\win32 2、编辑环境变量: 编…

TeXstudio报错: fwrite: Broken pipe xelatex.exe

错误: 解决方法: 选项->设置TeXstudio 默认编译器换成PdfLaTex: 问题解决。

CTEX编译Xelatex以及如何更新Miktex

1.现在很多科研人员都喜欢用latex来写文章,主要是latex有了模板之后排版较简单,而且参考文献比较容易生成,不需要再去排版。本人自己比较喜欢使用CTEX,这个得看个人习惯使用吧。有很多同胞在使用CTEX 时可能会遇到无法编译Xelatex…

linux下latex使用教程,LaTeX使用--XeLaTeX入门基础(二)

主机平台:Gentoo Linux 11.2 内核版本:Linux Kernel 3.2.1 编译环境:XeTeX 3.1415926-2.3-0.9997.5 (TeX Live 2011) 相关阅读 主机平台:Gentoo Linux 11.2 内核版本:Linux Kernel 3.2.1 编译环境:XeTeX 3.…

TeXworks 设置成默认用XeLaTeX排版

TeXworks 设置成默认用XeLaTeX排版 在用Texlive2020中,自身自带的编辑器每次都是默认以pdfLaTeX的方式进行排版 因为pdfLaTex在排版中文的时候容易乱码和报错, 用XeLaTeX排版就不会,为了方便就将它设置为一打开编辑器就是以XeLaTeX 方式排版 一打开就是这样子 首先在编辑器页面…

解决XeLaTex编译后中文出现乱码的问题

最近想用LaTex做简历,但是在做中文简历的时候,出现乱码的情况,网上查了很多解决方法,最后成功解决了,在这里总结分享一下。 先建立一个tex文件,输入一下格式的文件,注意加入\usepackage{CTEX} …

Latex、XeLatex无法加粗

XeLaTeX是新的Unicode版本,内建支持Unicode(UTF-8),可以调用操作系统的字体。但是在使用的时候也可能会出现许多问题,例如我最近使用的时候字体就一直无法显示粗体,但是运行的时候不报错。 原因有可能是你的系统里面缺少模板指定…