自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(13)
  • 收藏
  • 关注

原创 Qt 元对象系统Meta-methods

之前的《Qt 元对象系统》大概介绍了Qt Meta-Object System(Qt元对象系统)的基本内容。本文主要介绍元对象系统中的Meta-methods(元方法):Meta-methods是什么?列举Meta-methods调用Meta-methods测试Meta-method名称的格式详细解析invokeMeta-Object Meta-methods介绍Meta-methods之前,先插入一个疑问:Qt的信号槽机制到底是如何实现的?connect链接信号和槽时主要维护了哪些内容

2021-09-05 21:33:38 696

原创 Qt的信号槽和MFC的消息机制比较

前言前两天有朋友面试被问到Qt的信号槽有什么优势。后来我们讨论了一下,下面记录一下自己的心得吧。消息机制介绍MFC的消息机制其实就是消息映射机制,程序员需要将自定义消息和对应的处理函数添加到消息映射表中。通过PostMessage和SendMessage来实现异步和同步消息。Qt的信号槽机制是信号和槽函数通过QObject::connect动态链接上后存储到元对象系统中,通过emit发送信号,对应的槽函数执行。比较Qt的信号槽是动态链接的,而MFC的消息映射是静态的Qt的信号槽支持自定义

2021-08-23 17:49:15 1764

原创 C++设计模式实现 - 简单工厂&工厂方法&抽象工厂

工厂模式定义工厂模式就是定义一个工厂类,提供创建产品对象的接口,根据工厂创建产品的方式可以分为以下三种:简单工厂工厂方法抽象工厂简单工厂简单工厂就是在工厂类中提供一个创建产品对象的接口,通过传入的产品类型来创建对应的产品对象。UML图优缺点优点:工厂没有过多的业务逻辑,逻辑简单只需知道产品的类型,不用知道产品的类名对象的创建和对象的使用完全分离缺点:支持产品单一,不易扩展,扩展不同族的产品时只能引入新的工厂类产品过多时,工厂方法的代码会非常复杂,不易维护违背了开闭

2021-07-08 15:15:48 176

原创 Qt多进程间通信方式——共享内存

正文Windows平台下进程间通信常用方式有管道、文件映射、Socket通信和共享内存等,这里详细介绍一下Qt的共享内存机制。Qt官方例子Qt官方的例子主要是一个客户端加载图片后,将图片存储到共享内存中,另一个客户端从共享内存中获取图片显示。加载图片客户端效果:获取图片客户端效果:加载图片的相关代码:void Dialog::loadFromFile(){ if (sharedMemory.isAttached()) detach(); ui.label

2021-05-31 16:08:18 2809

原创 STL容器 - vector

vector概述vector的数据存储以及操作方式和array非常相似。两者唯一的区别在于内存空间的灵活性。array在初始化完成后就无法改变大小了;如果要扩大内存空间则必须人为申请一块新的足够大的内存,然后将原来的数据拷贝到新的地址中,最后释放原来的内存。vector的扩容操作由其内部机制完成,当数据满了后,vector内部会申请比原来大一倍(甚至更大)的内存空间,而不是大一个元素的内存,因为“申请新内存->拷贝数据->释放旧内存”一系列操作非常耗时,所以在设计扩容机制时必须考虑减少扩容

2021-05-20 10:55:13 156 1

原创 C++ 基础 - 定位new(placement new)

前言复习一下STL源码,记录一下知识点。template <class T1, class T2>inline void construct(T1* p, const T2& value) { new (p) T1(value); // placement new}placement newC++的new operator主要做了两件事:分配内存在分配的内存中构造对象而定位new(placement new)只做了一件事:在已有的地址上构造对象。placeme

2021-05-19 18:39:24 491 1

原创 Qt 多线程编程之入门

前言多线程在实际项目编程中是非常常用的,下面按照以下几点进行介绍:线程介绍QThread介绍线程同步正文1. 线程介绍因为进程的创建、切换需要大量的时间和空间的消耗,因此在上世纪80年代诞生了一种SMP(Symmetrical Multi-Processing)的对称多处理技术,这就是线程。线程的创建、切换所需的消耗要比进程小很多,这是因为进程需要一块完整的地址空间,而线程只是进程中的最小执行单元,共享进程的地址空间,不需要创建新的资源。1.1 线程和进程的区别区别线程

2021-05-09 14:38:46 393

原创 Qt 样式表介绍

概述Qt Widget界面美化除了自己绘制外,有一个更简单高效的方式,就是Qt样式表。Qt样式表是一种强大的机制,通过QApplication::setStyleSheet()设置整个应用程序的样式,通过QWidget::setStyleSheet()设置特定widget的样式。样式表语法规则和HTML CSS基本一致,不了解CSS的可以参考CSS教程,这里就不多赘述了。样式表规则介绍样式表是由一个选择器和一个声明组成。QPushButton { color: red; }上面样式中,QPu

2021-05-01 13:56:10 1543

原创 Qt 信号与槽实现原理

前言之前一直停留在使用Qt库的层面,底层的实现也只是了解到一些皮毛而已,现在需要更深的了解它的实现原理,对以后开发会有很大的帮助。概述按照我整个深入了解的过程,介绍以下几点主要内容:signals和slots宏MOC 元对象编译器connect连接实现emit发送实现signals和slots宏Qt中的signals和slots两个宏的源码:# define slots Q_SLOTS# define signals Q_SIGNALS# define Q_SL

2021-04-15 16:48:24 884

原创 Qt connect的实现原理

概述connect实质上是将对象A的信号和对象B的槽函数进行连接,然后返回一个句柄Connection。正文下面通过源码来解析一下:(注意看中文注释)// connection表示信号槽连接句柄QMetaObject::Connection QObject::connect(const QObject *sender, const char *signal, const QObject *receiver, const ch

2021-04-15 15:51:51 2260

原创 Qt 信号如何触发槽函数?

概述因为Qt的MOC编译器在预处理的时候实现了信号函数,信号函数的实质就是调用了doActivate模板函数,这篇就单独拿出来记录一下。正文先看源代码:(注意中文注释)template <bool callbacks_enabled>void doActivate(QObject *sender, int signal_index, void **argv){ QObjectPrivate *sp = QObjectPrivate::get(sender); //

2021-04-15 11:25:40 1384

原创 Qt 元对象系统

概述元对象系统(Meta-Object System)是Qt开发库中最重要的核心系统。元对象系统提供类对象之间通信的信号与槽机制、运行时类型信息和动态属性系统。元对象系统由以下三部分组成:QObject:QObject类是所有使用元对象系统的类的基类。Q_OBJECT宏:声明Q_OBJECT宏可以使该类获得元对象系统的所有特性,比如动态属性、信号与槽等。MOC:MOC(元对象编译器)为每个QObject的子类提供必要的代码来实现元对象系统的特性。QObjectQObject是Qt对象模型的

2021-04-09 16:23:08 1834

原创 C++设计模式实现 - 单例模式

在开发过程中,我们都会用到很多全局变量

2021-04-05 11:55:14 134

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除