3、标准信号与槽-自定义槽函数

1、新建一个工程,一般实现功能都是在mainWidget w;的构造函数中实现,所以实现之前的代码;

2、在mainwidget.cpp 中实现如下

#include "mainwidget.h"
#include <QPushButton>

mainWidget::mainWidget(QWidget *parent)
    : QWidget(parent)
{
    QPushButton b1(this);
    b1.setText(QString("abc"));
    b1.move(100,100);
}

mainWidget::~mainWidget()
{

}

由于执行完构造函数以后,this局部变量就被释放了,所以并不会显示按钮;

3、因此需要在头文件中定义一个变量不被释放掉;

#ifndef MAINWIDGET_H
#define MAINWIDGET_H

#include <QWidget>
#include <QPushButton>

class mainWidget : public QWidget
{
    Q_OBJECT

public:
    mainWidget(QWidget *parent = nullptr);
    ~mainWidget();
private:
    QPushButton b1;  // 添加按钮对象
    QPushButton *b2;
};

#endif // MAINWIDGET_H

4、修改构造函数

mainWidget::mainWidget(QWidget *parent)
    : QWidget(parent)
{
    b1.setParent(this);
    b1.setText(QString("abc"));
    b1.move(100,100);

    b2 = new QPushButton(this); // 指针类型 分配内存 并指定父对象
    b2->setText(QString("123"));
    b2->move(50,50);
}

5、信号与槽

按钮按下会触发一个事件,以广播的形式发送一个我被按下了,如果有需要的会回应的这个事件;按下会发送一个信号,而接收信号使用connect进行处理

connect(const QObject *sender, const char *signal, const QObject *receiver, const char *method, Qt::ConnectionType type = Qt::AutoConnection)

connect(&b1,&QPushButton::pressed,this,&mainWidget::close);
/*
b1: 信号发送者
QPushButton::pressed: 什么样的动作触发该信号,按钮按下...需要被处理的信号
this: 哪一个窗口处理该信号
mainWidget::close: 接收信号这处理的动作,槽函数
*/

因此,可以将处理按钮123的动作,按钮按下后,主窗口关闭;该信号都是标准信号;

6、自定义槽函数

  1、相当于普通函数的用法;

  2、Qt5任意得成员函数,普通全局函数、静态函数都可以作为槽函数

  3、槽函数需要和信号一致(参数、返回值)

  4、返回值,由于信号没有返回值,因此槽函数一定没有返回值

// 自定义槽函数
connect(b2,&QPushButton::released,this,&mainWidget::myslot);

// 在头文件中添加成员函数
 void myslot();
// 并在源文件中实现相关函数功能
void mainWidget::myslot()
{
    b2->setText(QString("hello"));  // 将按钮的内容修改
}

7、信号---》短信 、槽函数----》手机

 

posted @ 2020-07-28 18:20  笑不出花的旦旦  阅读(649)  评论(0)    收藏  举报