Qt 信号与槽

Qt信号模型:函数

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

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

 

 

 Qt中系统消息概念:spa

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

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

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

 

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

  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()));//按钮与槽函数进行链接

运行结果:

  

相关文章
相关标签/搜索