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关键字

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

  SIGNAL和SLOT所指定的名称中:

  ——可以包含参数类型

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

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

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

  代码:

  修改类定义

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

运行结果:

  

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

DipsyHu

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值