认识信号和槽

       信号和槽是Qt中类对象间进行交互的一种机制。比如单击窗口上的一个按钮后想要弹出一个对话框。那么用信号和槽的机制来实现就是按钮是发射信号的对象,信号是单击按钮,而槽就是一个写你接收到某个信号后要做的事情,在这里就是接收到单击信号后要执行的函数。

       槽一般用slots关键字进行修饰

       实现信号与槽机制有两种方法,下面我们以《Qt creator快速入门第三版》的03\3-4进行讲解

#ifndef MYWIDGET_H
#define MYWIDGET_H

#include <QWidget>

namespace Ui {
class MyWidget;
}

class MyWidget : public QWidget
{
    Q_OBJECT

public:
    explicit MyWidget(QWidget *parent = 0);
    ~MyWidget();

private:
    Ui::MyWidget *ui;

public slots:
    void showChildDialog();
    //void on_showChildButton_clicked();
};

#endif // MYWIDGET_H
#include "mywidget.h"
#include "ui_mywidget.h"
#include <QDialog>

MyWidget::MyWidget(QWidget *parent) :
    QWidget(parent),
    ui(new Ui::MyWidget)
{
    ui->setupUi(this);
    connect(ui->showChildButton, &QPushButton::clicked,
            this, &MyWidget::showChildDialog);
}

MyWidget::~MyWidget()
{
    delete ui;
}

//void MyWidget::on_showChildButton_clicked()
//{
//    QDialog *dlg = new QDialog(this);
//    dlg->show();
//}

void MyWidget::showChildDialog()
{
    QDialog *dialog = new QDialog(this);
    dialog->show();
}

 以上代码分别为MyWidget的类声明和类方法实现

方法一:connect手动关联

在类声明里声明一个槽:

修饰符 slots:

(函数声明)返回值 函数名(参数列表)

然后在方法实现中实现槽。

最后在类的构造函数里调用connect函数进行信号和槽的关联,connect的四个参数分别对应:发射信号的对象,发射的信号,接收信号的对象,要执行的槽。发射的信号和要执行的槽有两种写法,一种就是上图中的代码用类直接引出方法名然后在前面加上&。还有一种是用宏的方法表示,如:

 connect(ui->showChildButton, SIGNAL(clicked()),this, SLOT(showChildDialog()));

第二种方式的信号和槽函数是可以带参的,但第一种就不清楚了,等有空了再回来看看。

方法二:自动关联

自动关联就是将关联函数整合到槽命名中去,这样就省去了connect函数,槽的命名规则为:字符on+_+发射信号的部件对象名+_+信号名。具体地可以看上述代码中注释掉的部分。

 

 

 

 

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值