Qt 三大核心机制

**

1.信号槽

**
信号槽是Qt对象间通讯的方法,主要通过connect()函数连接信号函数和槽函数进行通讯
connect() 是QObject类的一个静态函数;

 static QMetaObject::Connection connect(const QObject *sender, PointerToMemberFunction signal, const QObject *receiver, PointerToMemberFunction method, Qt::ConnectionType type = Qt::AutoConnection);

Qt信号槽的基本使用方法

send : 发送对象的指针
receiver: 接收/处理信号对象的指针
1. 使用宏定义 
connect(sender,SIGNAL(signals()),receiver,SLOT(slot()));
2.使用函数指针
connect(sender,&ClassName::signal,receiver,&ClassName::slot);
3.重载函数指针
 connect(this,QOverload<>::of(&ClassName::signal),this,QOverload<>::of(&ClassName::slot);
 4.匿名函数
 connect(sender,&ClassName::signal,receiver,[=]{
 	// 函数内容;
 });

具体代码简单的实现;

#include "connectdispaly.h"
#include <QDebug>
ConnectDispaly::ConnectDispaly(QWidget *parent)
    : QWidget(parent)
    , m_pBtn(new QPushButton("QPushButton",this))
    , m_pLineEdit(new QLineEdit(this))
{
    // 1. 宏定义
    connect(m_pBtn,SIGNAL(clicked()),m_pLineEdit,SLOT(clear()));
    // 1. 函数指针
    connect(m_pBtn,&QPushButton::clicked,m_pLineEdit,&QLineEdit::clear);
    // 1.函数重载
    connect(this,QOverload<int>::of(&ConnectDispaly::s_setIndex),this,QOverload<int>::of(&ConnectDispaly::getIndex));
    //connect(this,QOverload<QString>::of(&ConnectDispaly::s_setIndex),this,QOverload<QString>::of(&ConnectDispaly::getIndex));
    //4.匿名函数
    connect(m_pBtn,SIGNAL(clicked()),this,[]{
        qDebug()<<"lamda";
    });
}
// 
void ConnectDispaly::getIndex(int index){
    qDebug()<<QString("%1").arg(index);
}
void ConnectDispaly::getIndex(QString &str){
    qDebug()<<str;
}

宏定义

**`宏定义是Qt4的版本`**
#define SLOT(name) "1"#name  
#define SIGNAL(name) "2"#name

信号槽的连接方式

bool QObject::connect ( const QObject * sender,	 //对象
const QMetaMethod & signal,					//信号
 const QObject * receiver, 					//接收者	
const QMetaMethod & method,				//槽函数
 Qt::ConnectionType type = Qt::AutoConnection    //连接类型	       )

信号的取消连接 用的比较少

bool QObject::disconnect ( const QObject * sender, 
const QMetaMethod & signal,
const QObject * receiver, 
const QMetaMethod & method )

信号槽的五种连接方式

    enum ConnectionType {
        AutoConnection,     	// 默认连接方式 单线程 DirectConnection  多线程 DirectConnection
        DirectConnection,		// 单线程
        QueuedConnection,		// 多线程异步
        BlockingQueuedConnection,  // 多线程同步
        UniqueConnection =  0x80	// 唯一连接,用来防止重复连接
    };

2.元对象系统

元对象系统分为三大类:QObject类、Q_OBJECT宏和元对象编译器moc

Qt的类包含Q_OBJECT宏 moc编译器会对该类编译成标准的C++代码

3.事件模型

1.事件的创建
鼠标事件,键盘事件,窗口调整事件,模拟事件
2.事件的交付
Qt通过调用虚函数QObject::event()来交付事件。
3.事件循环模型
主事件循环通过调用QCoreApplication::exec()启动,
随着QCoreApplication::exit()结束,
4.本地的事件循环可用利用QEventLoop构建。
一般来说,事件是由触发当前的窗口系统产生的,但也可以通过使用 QCoreApplication::sendEvent()和 QCoreApplication::postEvent()来手工产生事件。需要说明的是QCoreApplication::sendEvent()会立即发送事件, QCoreApplication::postEvent()则会将事件放在事件队列中分发。
4.自定义事件

  • 4
    点赞
  • 36
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: Qt是一款流行的跨平台C++框架,有着强大的功能和丰富的类库。Qt核心机制包括Qt的元对象系统和信号槽机制Qt的元对象系统是Qt的一个重要特性,它是Qt实现反射的基础。在C++中,反射能够在运行时获取类的信息,如类名、属性、方法等,并在运行时动态地创建、调用对象。Qt的元对象系统通过为每个QObject派生的子类生成一个元对象,实现了C++的反射机制。元对象系统使得Qt能够在运行时获取QObject派生类的信息,并提供了一系列函数来操作这些对象。 Qt的信号槽机制Qt核心机制之一,它用于实现对象之间的通信。信号槽机制基于发布-订阅模式,其中一个对象发送信号,而另一个对象通过连接到这个信号的槽函数来接收信号并进行相应的处理。信号槽机制具有松耦合的特性,可以实现对象之间的解耦。 在信号槽机制中,信号是由QObject派生类定义的特殊函数,用于声明某个特定事件发生时要发送的信号。槽函数是QObject派生类中的普通函数,用于接收这个信号,并且执行相应的处理逻辑。信号和槽通过信号槽连接函数进行连接,这样当信号触发时,与之连接的槽函数就会被自动调用。 Qt的元对象系统和信号槽机制Qt强大功能的基石。元对象系统实现了C++的反射机制,允许在运行时获取和操作对象的信息。信号槽机制使对象之间的通信变得简单和易用,提供了一种灵活而高效的方式来实现对象间的解耦。通过这些核心机制Qt能够帮助开发人员更快速、更简便地开发高质量的跨平台应用程序。 ### 回答2: qt核心机制是指Qt框架的底层机制,主要包括Qt元对象系统和Qt信号槽原理。 Qt元对象系统是Qt框架中的一个重要概念,它在C++语言的基础上添加了一套元对象(Meta Object)系统。元对象系统在编译过程中生成了额外的代码,使得我们可以在运行时获得更多的对象信息。通过元对象系统,Qt实现了信号槽机制、宏(MOC)编译和反射等功能。元对象系统实际上是一种面向对象的编程方式,通过它可以实现Qt特有的功能,如动态属性、动态信号和槽等。 Qt信号槽原理是Qt框架中的一个重要特性,用于对象间的通信。信号槽是一种异步通信方式,通过信号发送者(Sender)发送信号,接收者(Receiver)通过槽函数(Slot)响应信号。信号和槽是通过元对象系统实现的,编译器会在MOC编译阶段解析信号和槽的声明,并在运行时建立连接关系。这种机制使得Qt程序的耦合性更低,灵活性更高,同时也为多线程编程提供了一种方便的方式。 总的来说,Qt核心机制包括了Qt的元对象系统和信号槽原理。元对象系统为Qt框架提供了反射、动态属性和动态信号槽等功能,信号槽机制实现了对象间的异步通信。这些机制使得Qt框架具有高度的可扩展性、灵活性和跨平台性,为开发者提供了一种便捷、高效的方式来构建应用程序。 ### 回答3: Qt是一种跨平台的应用程序框架,具有丰富的功能和强大的性能。Qt核心机制是指Qt框架的基础机制,包括Qt元对象系统和Qt信号槽原理。 Qt元对象系统是Qt框架的核心组成之一,用于实现Qt的一些特殊功能,如信号槽机制和动态属性。Qt元对象系统通过将所有的类对象都派生自QObject基类,实现了一种反射机制,使得对象之间可以动态地连接和交互。通过使用元对象系统,Qt可以实现面向对象编程的高级特性,如对象间的信号和槽的连接,对象的属性系统以及对象的内省(即动态获取对象的属性和方法信息)等。 Qt信号槽原理是Qt框架实现事件驱动的关键机制。信号槽机制允许不同对象之间进行松散的耦合,通过信号和槽的方式进行通信。信号是一种特殊的成员函数,用于表示某个事件的发生,槽是一种普通的成员函数,用于响应信号的发出。当一个信号被发出时,Qt框架会自动将信号与槽进行匹配,并调用对应的槽函数。这种机制使得对象之间的通信更加灵活和高效,可以实现事件的传递和处理,避免了显式的函数调用和回调函数的使用。 综上所述,Qt核心机制包括Qt元对象系统和Qt信号槽原理。通过元对象系统,Qt实现了一种反射机制,使得对象之间可以动态地连接和交互;通过信号槽机制Qt实现了一种松散耦合的事件处理方式,提高了对象之间的通信效率和灵活性。这些机制Qt框架的重要组成部分,为开发者提供了更加强大和易用的工具和功能。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值