• Qt的信号和槽机制


    一、信号和槽机制

        信号和槽用于两个对象之间的通信,我们希望任何对象都可以和其他对象进行通信。
        当一个特殊的事情发生时便可以发射一个信号,而槽就是一个函数,它在信号发射后被调用来相应这个信号。(强耦合)
        一个信号对应一个槽;一个信号也可以关联多个槽;多个信号关联一个槽;一个信号关联另一个信号。

    二、mySignalSlot实例

    新建QtGui应用>>项目名mySignalSlot>>基类QWidget>>新建Qt设计师界面>>Dialog without Buttons>>类名MyDialog

    mydialog.h添加一个信号:

    1. signals:
    2.     void dlgReturn(int); //自定义的信号

        signals没有public、private、protected等限定符。并且只有申明没有实现。只有QObject类和其子类派生的类才能使用信号和槽机制。
        信号和槽在类申明最开始处添加Q_OBJECT宏(自动完成)

    mydialog.ui>>添加Spin Box部件和Push Button部件>>PushButton显示为确定>>pushButton增加槽如下:

    1. void MyDialog::on_pushButton_clicked() //确定按钮
    2. {
    3.     int value = ui->spinBox->value(); //获取输入的数值
    4.     emit dlgReturn(value); //发射信号
    5.     close(); //关闭对话框
    6. }

    widget.h添加自定义槽

    1. private slots:
    2.     void showValue(int value);

    widget.ui>>拖入Label部件>>更改为"获取的值是:"

    widget.cpp>>添加头文件#include "mydialog.h">>在构造函数中添加:

    1.     MyDialog *dlg = new MyDialog(this);
    2.     connect(dlg, SIGNAL(dlgReturn(int)), this, SLOT(showValue(int)));
    3.     dlg->show();

    这里创建了一个MyDialog,使用Widget作为父部件。然后将MyDialog类的dlgReturn()信号与Widget类的showValue()槽进行关联。
    connect()原型:

    1. static QMetaObject::Connection connect(const QObject *sender, const char *signal,
    2.                         const QObject *receiver, const char *member, Qt::ConnectionType = Qt::AutoConnection);
    第一个:发送信号的对象
    第二个:要发送的信号
    第三个:接收信号的对象
    第四个:执行的槽
    对于信号和槽,必须使用SIGNAL()和SLOT()宏将参数转化成const char *类型。


    widget.cpp:

    1. void Widget::showValue(int value)
    2. {
    3.     ui->label->setText(tr("获取的值是:%1").arg(value));
    4. }

        

    无欲速,无见小利。欲速,则不达;见小利,则大事不成。
  • 相关阅读:
    TCP 连接状态
    可视化垃圾回收算法
    flume-ng+Kafka+Storm+HDFS 实时系统搭建
    WeX5 IDE 手机移动开发+JAVA +大数据
    云计算高级运维工程师
    CentOS 5.8 上安装 systemtap-2.6
    SYSTEMTAP -ORACLE
    Apple激活日期查询
    Div 浮动到另一个div之上
    Python模块常用的几种安装方式
  • 原文地址:https://www.cnblogs.com/ch122633/p/7363235.html
Copyright © 2020-2023  润新知