QT信号与槽及其附属知识点

2019-12-23  本文已影响0人  梦幽辰

QT常用函数概述

按钮,框函数

功能好像一样QAQ


QT头文件


信号与槽

概述

信号槽是 Qt 框架引以为豪的机制之一。所谓信号槽,实际就是观察者模式。当某个事件发生之后,比如,按钮检测到自己被点击了一下,它就会发出一个信号(signal)。这种发出是没有目的的,类似广播。如果有对象对这个信号感兴趣,它就会使用连接(connect)函数,意思是,将想要处理的信号和自己的一个函数(称为槽(slot))绑定来处理这个信号。也就是说,当信号发出时,被连接的槽函数会自动被回调。这就类似观察者模式:当发生了感兴趣的事件,某一个操作就会被自动触发。(这里提一句,Qt 的信号槽使用了额外的处理来实现,并不是 GoF 经典的观察者模式的实现方式。)

信号和槽是Qt特有的信息传输机制,是Qt设计程序的重要基础,它可以让互不干扰的对象建立一种联系。

槽的本质是类的成员函数,其参数可以是任意类型的。和普通C++成员函数几乎没有区别,它可以是虚函数;也可以被重载;可以是公有的、保护的、私有的、也可以被其他C++成员函数调用。唯一区别的是:槽可以与信号连接在一起,每当和槽连接的信号被发射的时候,就会调用这个槽。

自定义槽

  1. QT5:任意的成员函数,普通全局函数,静态函数

  2. 槽函数需要与信号一致(参数类型和参数个数一致)

  3. 由于信号都是没有返回值,所以,槽函数一定没有返回值


额外知识点

例如

    void (SubWidget::*funSignal)()=&SubWidget::mySignal;
    void (SubWidget::*testSignal)(int, QString)=&SubWidget::mySignal;
    connect(&subWin, funSignal, this, &MainWidget::dealSub);
    connect(&subWin, testSignal, this, &MainWidget::dealSolt);

    //str.toUtf8() -> 字节数组QByteArray
    //...data() -> QByteArray -> char *
    qDebug()<<a<<str.toUtf8().data();
    //高版本可以直接用第二种方式

    //高版本QT可以直接打印中文
    qDebug()<<a<<str;

内存回收机制

上一篇 下一篇

猜你喜欢

热点阅读