Qt
文章平均质量分 93
Qt
Master Cui
这个作者很懒,什么都没留下…
展开
-
15.QT布局管理及示例
Qt布局系统包含一组布局管理类,当界面变化时,布局系统会自动定位和调整窗口的大小,从而确保控件始排列整齐并确保界面可用。所有QWidget子类都可以使用布局管理类。 QWidget::setLayout()函数将布局应用于QWidget子类的界面。使用布局的最简单方法是使用内置布局管理器:QHBoxLayout,QVBoxLayout,QGridLayout和QFormLayout。本文通过QT官方的例子Basic Layouts来熟悉这几个类如何使用,运行出来之后,界面是这样的下面先新建一原创 2020-10-24 08:48:06 · 731 阅读 · 0 评论 -
14.QueuedConnection和BlockingQueuedConnection连接方式源码分析
QT信号槽直连时的时序和信号槽的连接方式已经在前面的文章中分析过了,见https://blog.csdn.net/Master_Cui/article/details/109011425和https://blog.csdn.net/Master_Cui/article/details/109228521,本文对QueuedConnection和BlockingQueuedConnection连接方式进行源码分析当信号槽的连接方式是QueuedConnectionif ((c->connect原创 2020-10-23 19:13:53 · 7862 阅读 · 6 评论 -
13.QT信号槽的连接方式
QT的信号槽机制和线程的启动方式已经在前面的文章中写过了,本文主要是对信号槽的连接方式进行解读,信号槽的连接方式一共有5种:1.Qt::DirectConnection发出信号后立即调用槽函数。 该槽函数在信号函数所在的线程中执行。示例//头文件#ifndef SIGNALSLOTTEST_H#define SIGNALSLOTTEST_H#include <QObject>#include <QThread>#include <iostre.原创 2020-10-22 19:24:05 · 954 阅读 · 1 评论 -
12.QT线程的两种启动方式
一、QT中的线程QT中的线程主要是通过QThread进行管理,一个QThread对象管理程序中的一个线程。 QThreads管理的线程在run()中开始执行。 默认情况下,run()通过调用exec()启动并在线程中运行事件循环。线程的启动方式有两种:1.使用moveToThread启动线程示例//头文件#ifndef THREADSTART_H#define THREADSTART_H#include <QObject>#include <QThread&原创 2020-10-21 20:33:13 · 2254 阅读 · 1 评论 -
11.QT事件机制源码时序分析(下)
接上一篇文章https://blog.csdn.net/Master_Cui/article/details/109182406,本文继续解析QCoreApplication::sendEvent和QCoreApplication::sendPostedEvents的代码先看下QCoreApplication::sendEventbool QCoreApplication::sendEvent(QObject *receiver, QEvent *event){ Q_TRACE(QCor原创 2020-10-20 15:55:33 · 1297 阅读 · 1 评论 -
10.QT事件机制源码时序分析(中)
接上一篇文章https://blog.csdn.net/Master_Cui/article/details/109162220,上篇文章已经说过,在Ubuntu18.04,QT的事件机制实际上是采用glic中的事件循环机制来完成的,那么,QT是如果使用glib中的事件循环呢?1、glib的主事件循环机制glib的主事件循环管理事件源。事件源可以通过g_source_attach()函数添加。每个事件源都会关联一个GMainContext。GMainLoop数据类型代表了一个主事件循环。通过g_ma原创 2020-10-20 15:44:31 · 1197 阅读 · 3 评论 -
9.QT事件机制源码时序分析(上)
通过上两篇博客https://blog.csdn.net/Master_Cui/article/details/109093845和https://blog.csdn.net/Master_Cui/article/details/109109972知道了QT如果处理事件以及事件发送、事件队列和事件循环相关的类,但是这些东西是如何串联在一起的呢?下面通过源码分析下事件机制的时序1.首先从一般的QT的main函数开始int main(int argc, char *argv[]){原创 2020-10-19 15:51:08 · 1037 阅读 · 0 评论 -
8.QT的事件循环与事件发送相关类
一、QT的事件发送类QCoreApplicationQT使用QCoreApplication类为Qt程序提供了事件循环机制。该类继承QObject。QCoreApplication包含主事件循环,来自操作系统的事件(例如计时器和网络事件)和其他事件都将在主事件循环中被处理和调度。在QT的程序中,主函数一般都是这样的int main(int argc, char *argv[]){ QApplication a(argc, argv); mainWindow w; w.原创 2020-10-16 09:30:19 · 1274 阅读 · 0 评论 -
7.QT事件的处理
在Qt中,事件是从抽象QEvent类派生的对象,它们表示发生在应用程序内部或由于应用程序需要了解的外部活动而发生的事情。 QObject子类的任何实例都可以接收和处理事件,所以,要使用事件机制,也得直接或者间接继承QObject一、事件的处理当事件发生时,Qt通过构造适当的QEvent子类的实例来创建事件对象,并通过调用event()函数将事件传递到QObject的特定实例或其子类中。event()函数根据所传递事件的类型,将为特定类型的事件调用事件处理程序,而且event()函数根据事件是被接受还原创 2020-10-15 11:27:19 · 751 阅读 · 0 评论 -
6.QT信号槽的时序分析
前面已经分析了元对象系统、MOC文件和信号槽的连接,本文分析下信号槽的时序信号的触发通过emit关键字触发,以sigf1为例,通常是这样的emit sigf1(t1)emit就是个空宏,在qobjectdefs.h中,没啥用,实质就是个函数调用#ifndef QT_NO_EMIT# define emit#endif而函数sigf1在MOC中实现void moctest::sigf1(double _t1){ void *_a[] = { nullptr, con原创 2020-10-11 14:25:45 · 1708 阅读 · 8 评论 -
5.QT5中的connect的实现
在QT4中,解析信号槽是通过将信号槽的名字转化为字符串,然后通过connect解析该字符串,得到信号函数的相对序号和,然后创建信号connectionlist,但是,所有的检查都在运行时,通过解析字符串进行。 这意味着,如果信号槽的名称拼写错误,编译会成功,但是只是会建立空连接。moctest::moctest(){ connect(this, SIGNAL(sigf1(double1)) , this, SLOT(slotf(double))); connect(this, &am原创 2020-10-11 14:14:08 · 5720 阅读 · 9 评论 -
4.QT4中的connect的实现
信号槽通过connect进行连接,connect的源码在qobject.cpp中QT4中的connect的声明如下static QMetaObject::Connection connect(const QObject *sender, const char *signal, const QObject *receiver, const char *member, Qt::ConnectionType = Qt::AutoConnection);使用时,一般是这样的connect(sen原创 2020-10-11 14:05:17 · 1768 阅读 · 0 评论 -
3.MOC文件解读(下)——MOC文件中的函数
宏Q_OBJECT中的数据部分已经在在上一篇https://blog.csdn.net/Master_Cui/article/details/109007524分析完了,但是,MOC文件中还有一部分函数也在MOC文件中实现对应的函数如下 virtual const QMetaObject *metaObject() const; \ virtual void *qt_metacast(const char *); \ virtual int qt_metacall(QMetaObject::C原创 2020-10-11 13:59:59 · 2031 阅读 · 0 评论 -
2.MOC文件解读(上)——MOC文件中的数据
接上篇文章原创 2020-10-11 13:49:16 · 3212 阅读 · 1 评论 -
1.QT元对象系统、信号槽概述、宏Q_OBJECT
一、元对象系统(Meta-Object System)Qt添加C++原本不具备的元对象系统,元对象系统提供了信号槽机制,运行时类型信息和动态属性系统。元对象系统基于三点:1.元对象系统为以QObject类为基类的对象提供了特有的功能2.类private的Q_OBJECT宏使得以QObject类为基类的对象能够使用元对象功能3.元对象编译器(Meta-Object Compilermoc)为每个QObject子类生成必要的代码,以具体实现元对象功能。moc读取C ++源文...原创 2020-10-11 08:29:54 · 1128 阅读 · 1 评论 -
0.QObject的数据存储
一、QObject概述QObject类是QT的核心,大部分QT类都是从这个类直接或者间接继承而来。包含QT的信号槽机制和事件机制QObject通过对象树将对象组织起来,当使用QObject创建一个对象作为其他对象的父对象时,QObject对象会将其他对象自动添加到子对象的列表中,注意,这里的对象数和父子对象关系不是C++里面的父类和子类的关系,只是一种单纯的树型组织结构二、QObject的数据存储QObject 类的相关文件一共有四个:qobject.h,QObject class.原创 2020-10-16 11:01:23 · 563 阅读 · 0 评论