Qt的信号和槽机制

来源:互联网 发布:中方网络花店 编辑:程序博客网 时间:2024/06/11 03:59

一、信号和槽机制

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

二、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. }
    
<script>window._bd_share_config={"common":{"bdSnsKey":{},"bdText":"","bdMini":"2","bdMiniList":false,"bdPic":"","bdStyle":"0","bdSize":"16"},"share":{}};with(document)0[(getElementsByTagName('head')[0]||body).appendChild(createElement('script')).src='http://bdimg.share.baidu.com/static/api/js/share.js?v=89860593.js?cdnversion='+~(-new Date()/36e5)];</script>
阅读(4) | 评论(0) | 转发(0) |
0

上一篇:pic16f877a的PWM实验学习

下一篇:PIC16F877A的TIME0学习

相关热门文章
  • test123
  • 编写安全代码——小心有符号数...
  • 使用openssl api进行加密解密...
  • 一段自己打印自己的c程序...
  • 彻底搞定C语言指针详解-完整版...
给主人留下些什么吧!~~
原创粉丝点击