![](https://img-blog.csdnimg.cn/7dd90b86a9cb45e588b86cc6b8bf7e35.jpeg?x-oss-process=image/resize,m_fixed,h_224,w_224)
Qt基础内容教程
文章平均质量分 91
如果你想学习Qt编程,这份基础教程是一个很好的起点。我会用简单易懂的语言和代码实例在配上图片解析,帮助读者掌握Qt的基础内容包含信号槽、事件、布局、样式表、QPainter绘图、多线程等内容。无论你是新手还是有经验的开发者,这份教程都能让你受益匪浅。赶快开始学习吧!
前行中的小猪
一个爱数码,爱捣鼓,喜欢钻研,疯狂敲代码努力奋斗的Coder, Cheer Up!
展开
-
Qt基础教程介绍
从去年开始整理了Qt基础相关的内容,具体内容包含了信号槽、事件、界面布局、控件样式表、QPainter图形绘制、多线程等方面的知识。这些内容对于学习Qt编程非常重要,每篇文章都是用心在写,期间翻阅了大量的Qt文档结合查询一些的资料避免出现错误的观点,努力争取让文章更加浅显易懂,每个知识点配合代码实例进行讲解,并且后期会继续地扩充和完善这些内容。对于Qt新手或者小白非常推荐学习,对于订阅的小伙伴可以加QQ(3062974430)获取一些书籍和视频学习资料。原创 2023-06-27 15:19:55 · 855 阅读 · 0 评论 -
5.1 QThread的两种使用方式
QThread类用于创建和管理线程,它并不是线程本身。通过使用QThread,我们可以在应用程序中实现并发执行的任务,从而提高应用程序的性能和响应能力,能够有效地利用CPU资源,提高程序运行效率。且QThread创建和管理线程的方式是独立于平台的,不管是windows、linux、还是macOS都是适用的。QThread对象还支持信号槽机制,在不同线程之间进行数据传递变得更加方便快捷。同时也提供了一系列方法和属性来帮助我们对线程进行管理和控制。原创 2024-01-04 19:00:00 · 1595 阅读 · 0 评论 -
QPainter4.2.3-4.2.4
4.2.3 QPainter的save和restore4.2.4 QPainter的平移、放缩、旋转效果讲解。原创 2023-10-24 20:58:56 · 379 阅读 · 0 评论 -
4.2 QPainter的绘图接口介绍(下)
上篇文章中我们举例介绍了这几个接口的用法,本篇文章继续讲解绘图的接口。原创 2023-10-24 20:55:19 · 253 阅读 · 0 评论 -
4.2 QPainter的绘图接口介绍(中)
上篇文章中我们举例介绍了这几个接口的用法,本篇文章继续讲解绘图的接口。原创 2023-10-24 20:50:34 · 145 阅读 · 0 评论 -
4.2 QPainter的绘图接口介绍(上)
上一篇文章中讲述了在哪里绘图,怎么开始绘制,怎么跟绘制设备绑定、解绑等基础知识,今天就来点实操的,下面坐好了,开始阅读吧。下图是《C++ GUI Programming with Qt 4》这本书中列出的关于QPainter常用的画图方法,基本上都是以draw开头,对应的图片很直观地说明的每种方法的效果,并且很多方法都进行了重载,方便我们使用,非常地友好,下面我们对这些接口做一些详细的介绍。原创 2023-10-24 20:47:04 · 179 阅读 · 0 评论 -
4.1QPainter绘图讲解
4.QPainter绘图讲解4.1 初识QPainter4.2 QPainter的接口介绍4.2.1 QPainter中的画笔、画刷介绍4.2.2 QPainter绘制接口4.2.3 QPainter的save和restore4.2.4 QPainter的平移、放缩、旋转效果讲解。原创 2023-10-24 20:37:14 · 163 阅读 · 0 评论 -
3.2-3.4 Qt样式表使用补充说明
我们在编辑框中添加需要的样式即可,然后点击确定我们就可以看到设置的效果了,这里我们只对QPushButton设置了样式,那我们是不是对界面上每个控件都要单独设置样式呢?当然不需要,我们可以对整个界面设置样式,然后将所有控件的样式都写在其中就可以了。Qt的样式表编辑工具可以帮助我们检验样式是否编写正确。我们看到下面设置的样式有误,并没有检测出来,但是这里的错误只会影响这一条样式无效,而不会导致整个样式无效。原创 2023-09-18 10:58:16 · 137 阅读 · 0 评论 -
3.1 Qt样式选择器
3.1.1 Universal Selector (通用选择器)3.1.2 Type Selector (类型选择器)3.1.3 Property Selector (属性选择器)3.1.4 Class Selector (类选择器)3.1.5 ID Selector (ID选择器)3.1.6 Descendant Selector (后裔选择器)3.1.7 Child Selector (亲儿子选择器)3.1.8 补充。原创 2023-08-14 11:09:14 · 1512 阅读 · 0 评论 -
2.3 QLayout一探究竟(下)
2.布局2.1 布局简介2.2 Qt四大布局介绍及使用方法2.2.1 QBoxLayout讲解及示例2.2.1.1 QHBoxLayout介绍2.2.1.1 QVBoxLayout介绍2.2.2 QFormLayout讲解及示例2.2.3 QGridLayout讲解及示例2.2.4 QStackedLayout讲解及示例2.3.1 布局的基础单元-QLayoutItem2.3.1.1 QSpacerItem介绍2.3.1.2 QWidgetItem介绍2.3.2。原创 2023-07-23 00:17:43 · 206 阅读 · 0 评论 -
1.1.1 Qt信号槽之connect与disconnect介绍
首先我们要知道,如果想要使用Qt中的信号槽机制, 那么必须继承,因为QObject类中包含了信号槽的一系列操作,今天我们来讲解的是connect的应用。原创 2023-06-26 15:26:11 · 4012 阅读 · 0 评论 -
1.1.2 Qt信号槽之ConnectionType参数详解
Qt提供了Qt::ConnectionType类型的枚举来控制信号槽连接的类型,根据connect方法中该类型的值来确定连接类型,其主要区别是决定信号触发的时候槽函数是立即执行还是延迟执行。下面详细讲解这几种类型:ConstantValueDescriptionQt::AutoConnection0(Default) If the receiver lives in the thread that emits the signal, Qt::DirectConnection is原创 2022-04-18 14:21:06 · 1022 阅读 · 1 评论 -
1.1.3 Qt信号槽连接不上的原因分析
Qt中的信号槽简介Qt中的信号和槽是用于本对象或者对象与对象之间的通信、参数传递。信号和槽不是标准的C++代码,这些代码需要使用Qt的moc来进行重新编译,而moc全称是 Meta-Object Compiler,也就是"元对象编译器",这里对其原理暂不进行深究,到后面章节再详细分析说明。[static] QMetaObject::Connection QObject::connect(const QObject *sender, const char *signal, const QObject原创 2022-03-31 11:11:31 · 4845 阅读 · 0 评论 -
1.1.4 Qt信号槽之再谈Qt4与Qt5中信号槽使用的差异
通过上面的示例和分析,我们已经明显感受到Qt4和Qt5中connect的不同之处,但是Qt文档中有一篇文章专门叙述了Qt4和Qt5中connect的差异,这里根据此篇文章带着大家再深入了解拓展一下。从Qt5开始,Qt提供了两种不同方法的信号槽连接方式,一种是基于字符型,一种是基于函数式,其实也就是我们上方提到的Qt4和Qt5的不同写法,Qt4中connect的信号和槽函数的参数类型为*,而Qt5中connect的信号和槽函数的参数类型为(指向成员函数的指针)。下方是Qt文章中整理的四个不同点。原创 2023-06-27 14:20:15 · 1057 阅读 · 0 评论 -
1.1.5 Qt信号槽之槽函数中获取发送信号对象——sender()
QObject::sender()我们如何在槽函数中获取到信号的发送对象呢,使用sender()方法即可获取。但是使用此方法我们需要注意几点:QObject *QObject::sender() const1、使用sender()方法获取信号的发送对象,前提是槽函数是被信号触发的,而非自己调用,否则返回空(nullptr),所以我们在使用的时候最好加个非空判断;2、通过此方法获取的对象指针仅在槽函数执行的期间有效;3、如果在此期间,信号发送对象被销毁,或者信号与槽函数已经断开,此对象指针将无效原创 2022-04-19 18:09:12 · 11379 阅读 · 2 评论 -
1.1.6 Qt信号槽之如何阻塞信号的触发
简述在之前的文章中我们使用connect来连接信号与槽函数,使用disconnec来断开信号与槽函数的连接。今天介绍的方法是如何阻碍当前对象的信号触发,有两种方法,下面一一道来。1、blockSignals() / signalsBlocked阻碍当前对象的信号触发效果bool QObject::blockSignals(bool block)If block is true, signals emitted by this object are blocked (i.e., emitting原创 2022-04-19 18:01:59 · 2536 阅读 · 1 评论 -
1.7 补充——C++ GUI Programming with Qt 4 中的信号与槽
我们已经将一些信号和槽绑定在了一起,声明了我们自己的信号和槽,当我们触发这些信号时,将会调用信号所绑定的槽。它提供了两个关键的服务:信号和槽的内省功能。内省功能对于信号和槽的实现是必要的,它允许程序开发者在程序运行时获取QObject子类的元信息,包括所支持的信号槽列表和它的类名。如果信号和槽函数的参数类型不一致,或者是信号和槽函数任意一个不存在,Qt将会在运行的时候发出一个警告信息,如果程序运行在调试的模式下。特殊的是,如果一个信号的参数比与之相连的槽函数多,那么多余的参数将会被简单地忽略掉。原创 2016-08-01 13:56:00 · 1561 阅读 · 0 评论 -
1.2.1 Qt中事件是如何进行传递——叙述篇(上)
建议大家使用示例代码自己再改一改测试一下其他的事件,或者再结合一些实例去解决一些问题,我们在了解到Qt事件的传递机制之后,这样更方便我们在实际应用中想到在哪个流程去更准确地过滤或者去处理一些相应的事件,而不会影响其他控件接收事件,或者继续传递等问题。关于事件过滤器,这里我们新建了一个专门的事件过滤器类来进行验证,也可以自己重写自己本身的事件过滤器然后给自己安装上,这样就是自己监测自己了,本篇主要验证事件的传递流程,事件过滤器在下篇文章中再详细说明。,就有了图三的编译器中打印的信息。原创 2023-06-27 23:07:48 · 962 阅读 · 2 评论 -
1.2.1 Qt中事件是如何进行传递——实例篇(下)
建议大家使用示例代码自己再改一改测试一下其他的事件,或者再结合一些实例去解决一些问题,我们在了解到Qt事件的传递机制之后,这样更方便我们在实际应用中想到在哪个流程去更准确地过滤或者去处理一些相应的事件,而不会影响其他控件接收事件,或者继续传递等问题。关于事件过滤器,这里我们新建了一个专门的事件过滤器类来进行验证,也可以自己重写自己本身的事件过滤器然后给自己安装上,这样就是自己监测自己了,本篇主要验证事件的传递流程,事件过滤器在下篇文章中再详细说明。,就有了图三的编译器中打印的信息。原创 2023-07-04 08:58:23 · 571 阅读 · 0 评论 -
1.2.2 Qt中的事件过滤器(eventFilter)详解
1.2.1 Qt中事件是如何进行传递1.2.2 Qt中的事件过滤器(eventFilter)1.2.3 如何自己模拟发送事件消息一、Qt中事件过滤器详解我们先看下另外两个相关的方法,一个是给对象安装某个事件过滤器,一个是移除对应的事件过滤器。void QObject::installEventFilter(QObject *filterObj)void QObject::removeEventFilter(QObject *obj)下方代码使用 installEventFilter方法 给原创 2022-05-17 16:50:13 · 17150 阅读 · 0 评论 -
1.2.3 如何自己模拟发送事件消息
下方代码中使用sendEvent方法模拟鼠标左键按下事件,特别提一点,在这种方式下我们模拟创建的事件对象,Qt是不会帮我们自动回收的,如果是new出来的需要我们自己delete,所以更建议使用临时变量的方式创建事件对象(创建在栈上的对象出函数之后,也就是生命周期结束自动销毁),同时也是因为sendEvent这种方式是立马执行,且是阻塞的,所以执行完之后不需要再使用此事件对象。因为这个方式是将事件立马抛出并下发下去,所以会响应相关事件函数的调用,且需要等该事件处理完毕之后再返回,是阻塞性的。原创 2023-07-10 09:18:20 · 246 阅读 · 0 评论 -
2.1-2.2 Qt布局简介及四大布局的使用
Qt提供了丰富的控件用于PC端的图形界面开发,而今天讲述的是Qt界面框架中的布局,主要用于排列控件的位置。我们在刚开始使用Qt的过程中,可能并不知道QLayout到底是个什么东西,有什么作用。作为新手,无论是刚开始看书,还是直接在网上查资料学习,在最初使用过程中基本都是使用Qt Designer这个工具通过拖拽控件的方式搞出一个大致的界面来。原创 2023-07-17 09:42:13 · 287 阅读 · 0 评论 -
2.3 QLayout一探究竟(上)
Qt文档中是这样介绍的,简单讲QSpaceItem在布局中相当于一块空白区域(或者说是一个占位符),比如不同控件之间设置不同的的间距,或者类似上文中的标题栏控件,需要将标题栏文字和关闭按钮左右分隔开来,这个时候就需要用到QSpaceItem进行填充。正常情况下,我们应该很少在程序中直接创建QSpaceItem对象来使用,因为布局管理器给我们提供了很多接口来解决上述问题,比如下方表格中就是QBoxLayout和QGridLayout布局管理器提供的几种方式隐式地创建了QSpaceItem来占据一定的空间。原创 2023-07-19 21:46:26 · 1041 阅读 · 0 评论 -
Qt之布局设置setLayout详解(上)
一、简述大家好,我是前行中的小猪,今天给大家讲解的布局的相关用法分析以及如何对控件进行重布局,先从助手文档带大家了解一下用法,然后再通过类似视频监控分屏切换的示例给大家简单分析一下,在一个控件中通过菜单切换实现不同的布局,我们先看一下效果。效果图1:一般视频监控这种场景会连接多颗摄像头去进行监控,这个时候就需要多屏操作,一般情况会连接多个显示器,但是奈何像学校,商场,小区需要几十上百个摄像头进行对整片区域的监控,这不是靠几个屏幕能看的过来的,这个时候就需要进行分区显示,比如一个屏幕显示单个、4个、6原创 2022-03-16 21:45:52 · 11455 阅读 · 1 评论 -
Qt之布局设置setLayout详解-源码剖析(下)
大家好,我是前行中的小猪,今天呢给大家继续上一篇之后的内容,再给大家进行一下拓展。原创 2022-03-17 21:30:51 · 4254 阅读 · 2 评论