Qt 信号与槽

Qt信号模型:

  Qt封装了具体操作系统的消息机制

  Qt遵循进店的GUI消息驱动事件模型

 

 

 Qt中系统消息概念:

  信号(Signal)——由操作系统产生的消息

  槽(Slot)——程序中的消息处理函数

  链接(Connect)——将系统消息绑定到信息处理函数

 

 信号与槽 核心函数 QObject::connect 函数

  bool connect(const QObject* sender, //发送对象

        const char* signal,  //消息名称

        const QObject* receiver,//接受对象

        const char* method,   //接受对象的成员函数

        Qt::ConnectionType type = Qt::AutoConnection );

在Qt中,消息用字符串进行描述

connect函数在消息名处理函数之间建立映射

Qt中的新关键字

  SIGNAL——用于指定消息名

  SLOT——用于指定消息处理函数名

  Q_OBJECT——所有自定义槽的类必须在类声明的开始处加上Q_OBJECT

  slots——用于在类中声明消息处理函数

实验: 通过实现一个QPushButton 控件关闭应用

  代码:  

 QApplication a(argc, argv);
    QPushButton b ;//定义一个QPushButton 对象b

    b.setText("click me to quit");//设置按钮显示字符
    b.show();//显示按钮
    /*将QPushButton 对象b 的点击事件与 QApplication a的退出操作进行绑定
     功能: 按钮按下关闭应用
    */
    QObject::connect(&b,SIGNAL(clicked()),&a,SLOT(quit()));//将按钮点击事件与应用关闭事件进行连接
    return a.exec();

自定义槽:

  只有QObject的子类才能自定义槽

  定义槽的类必须在声明的最开始处使用Q_OBJECT

  类中声明槽时需要使用slots关键字

  槽与所处理的信号在函数名上必须一致

  SIGNALSLOT所指定的名称中:

  ——可以包含参数类型

  ——不能包含具体的参数名

自定义槽实验:定义按钮槽函数并连接

  自定义槽需要满足上述条件。

  代码:

  修改类定义

class QCalculatorUI : public QWidget
{
    Q_OBJECT
private:
       QLineEdit* m_eidt;
       QPushButton* m_buttons[20];
       QCalculatorUI();//使用二阶构造 构造函数为私有
       bool conststruct();//二阶构造函数
private slots:
       void onButtonsClickde();
public:
       static QCalculatorUI* NewInstance();//入口函数
       void show();
       ~QCalculatorUI();
    
};


实现槽函数:
void
QCalculatorUI::onButtonsClickde() { QPushButton* buttons = (QPushButton*)sender(); qDebug()<<"onButtonsClickde"; qDebug()<<buttons->text(); }
建立连接:
connect( m_buttons[i*5 + j],SIGNAL(clicked()),this,SLOT(onButtonsClickde()));//按钮与槽函数进行连接

运行结果:

  

 

posted @ 2020-02-02 21:08  Dipsyhu  阅读(311)  评论(0编辑  收藏  举报