c++ qt 信号槽

刚刚学习qt,如有错误,请见谅(指出),谢谢!

信号槽是 Qt 框架引以为豪的机制之一。熟练使用和理解信号槽,能够设计出解耦的非常漂亮的程序,有利于增强我们的技术设计能力。
所谓信号槽,实际就是观察者模式。当某个事件发生之后,比如,按钮检测到自己被点击了一下,它就会发出一个信号(signal)

1.QObject::connect()函数是QT中的连接函数,将信号发送者sender对象中的信号signal与接受者receiver中的member槽函数联系起来。
在qt5中有5个重载:

QMetaObject :: Connection connect ( const QObject * , const char * ,
                                 const QObject * , const char * ,
                                 Qt :: ConnectionType ) ;
QMetaObject :: Connection connect ( const QObject * , const QMetaMethod & ,
                                 const QObject * , const QMetaMethod & ,
                                 Qt :: ConnectionType ) ;
QMetaObject :: Connection connect ( const QObject * , const char * ,
                                 const char * ,
                                 Qt :: ConnectionType ) const ;
QMetaObject :: Connection connect ( const QObject * , PointerToMemberFunction ,
                                 const QObject * , PointerToMemberFunction ,
                                 Qt :: ConnectionType )
QMetaObject :: Connection connect ( const QObject * , PointerToMemberFunction ,
                                 Functor ) ;

2.信号槽使用

#include <QApplication>
#include <QPushButton>
#include <QDebug>
//qt5
int main(int argc, char *argv[])
{
    QApplication a(argc, argv);
    QPushButton button("Test");
    /**
     * @brief QObject::connect
     *button 信号发送者
     *QPushButton::clicked clicked信号
     *QApplication::quit 处理函数
     */
    QObject::connect(&button,&QPushButton::clicked,QApplication::quit);
    button.show();
    return a.exec();
}
 
 

3.自定义信号槽

person.h

//QT5
#ifndef PERSON_H
#define PERSON_H
#include <QObject>
 
class CPerson : public QObject
{
   Q_OBJECT
public:
    CPerson(const QString &name,const qint16 &age):m_name(name),m_age(age) {}
    void send()
    {
        emit PrintNameAndAge(m_name,m_age);
    }
signals:
    void PrintNameAndAge(const QString &name,const qint16 &age);
protected:
    QString m_name;
    qint16 m_age;
};

main.cpp

#endif // PERSON_H
 
#include <QApplication>
#include <QPushButton>
#include <QDebug>
#include "person.h"
//qt5
 
void PrintPerson(const QString &name,const qint16 &age)
{
    qDebug()<<"姓名:"+name+" 年龄:"+QString::number(age);
}
void click()
{
 CPerson ps("张三",18);
 /**
  * @brief QObject::connect
  *ps 信号发送者
  *ps.PrintNameAndAge PrintNameAndAge信号
  *PrintPerson 处理函数
  */
 QObject::connect(&ps,&CPerson::PrintNameAndAge,&PrintPerson);
 ps.send();//发送信号
 qDebug()<<"click";
}
int main(int argc, char *argv[])
{
    QApplication a(argc, argv);
    QPushButton button("Test");
    button.show();
    QObject::connect(&button,&QPushButton::clicked,click);
    return a.exec();
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值