zoukankan      html  css  js  c++  java
  • 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()));//按钮与槽函数进行连接

    运行结果:

      

  • 相关阅读:
    (四)资源文件分类
    (三)整合SSH测试项目
    (二)搭建SSH环境
    (一)新建一个javaweb项目
    Python学习——使用dict和set
    POJ 2104 K-th number
    bzoj 3669: [Noi2014] 魔法森林 LCT版
    bzoj 3626: [LNOI2014]LCA
    bzoj 2588 Count on a tree
    bzoj 3514: Codechef MARCH14 GERALD07加强版
  • 原文地址:https://www.cnblogs.com/hjxzjp/p/12253714.html
Copyright © 2011-2022 走看看