Qt学习笔记2—信号与槽

这篇博客探讨了Qt中的信号与槽机制,通过示例代码`connect(&b1, &QPushButton::pressed, this, &Widget::close);`解释了如何使用connect函数连接信号与槽,其中b1是信号发射器,QPushButton的pressed信号被连接到Widget类的close槽函数,用于关闭窗口操作。" 78744836,7381610,Angular 自定义过滤器实现模糊查询,"['前端开发', 'Angular', '过滤器', '数据绑定']

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

connect(&b1, &QPushButton::pressed, this, &Widget::close);

需要用到connect( )函数;

&b1:是指信号发出者,必须是指针类型

&QPushButton::pressed:处理的信号,也就是,&发送者的类名::信号名字

this:信号接收者

&Widget::close:槽函数,信号处理函数; &接收者类名::槽函数的名字


#ifndef SUBWIDGET_H
#define SUBWIDGET_H

#include <QWidget>
#include <QPushButton>
class SubWidget : public QWidget
{
    Q_OBJECT
public:
    explicit SubWidget(QWidget *parent = nullptr);
    void sendslot();
signals:
//信号必须有signals关键字来声明
//信号没有返回值,但可以有参数
//信号就是函数的声明,只需声明,无需定义
//使用: emit mysignal();
    void mysignal();

public slots:

private:
    QPushButton b;
};



#endif // SUBWIDGET_H
#ifndef WIDGET_H
#define WIDGET_H

#include <QWidget>
#include <QPushButton>
#include "subwidget.h"

class Widget : public QWidget
{
    Q_OBJECT

public:
    Widget(QWidget *parent = 0);
    ~Widget();

    void mysolt();
    void change();
    void dealSub();

private:
    QPushButton b1;
    QPushButton *b2;
    QPushButton b3;

    SubWidget w;
};

#endif // WIDGET_H
#include "widget.h"
#include <QPushButton>

Widget::Widget(QWidget *parent)
    : QWidget(parent)
{
    b1.setParent(this);
    b1.setText("还在犹豫什么");
    b1.move(100,100);

    b2 = new QPushButton(this);
    b2 ->setText("点击充值");

    connect(&b1,&QPushButton::pressed,this,&Widget::close);
    //&b1: 信号发出者,指针类型
    //&QPushButton::pressed: 处理的信号, &发送者的类名::信号名字
    //this: 信号接收者
    //&Widget::close: 槽函数, 信号处理函数, &接收的类名::槽函数的名字

    //自定义槽,普通函数的用法
    //QT5:任意的成员函数、普通全局函数、静态函数
    //槽函数需要和信号一致(参数,返回值)
    //由于信号都是没有返回值,所以槽函数一定没有返回值

    connect(b2,&QPushButton::released,this,&Widget::mysolt);
    connect(b2,&QPushButton::released,&b1,&QPushButton::hide);


    setWindowTitle("天王盖地虎");
    b3.setParent(this);
    b3.setText("点击领取一个对象");
    b3.move(50,50);

   // w.show();
    //显示子窗口
    connect(&b3,&QPushButton::released,this,&Widget::change);

    //处理子窗口的信号
    connect(&w,&SubWidget::mysignal,this,&Widget::dealSub);

    resize(400,300);
}

void Widget::mysolt()
{
    b2->setText("充值成功");

}

void Widget::change()
{
    //子窗口显现
    w.show();
    //主窗口隐藏
    hide();

}

void Widget::dealSub()
{
    //子窗口隐藏
    w.hide();
    //主窗口显现
    show();
}
Widget::~Widget()
{

}

#include "subwidget.h"

SubWidget::SubWidget(QWidget *parent) : QWidget(parent)
{
    setWindowTitle("宝塔镇河妖");
    b.setParent(this);
    b.setText("你怕别是个傻子");

    connect(&b,&QPushButton::clicked,this,&SubWidget::sendslot);

    resize(400,300);
}

void SubWidget::sendslot()
{
    emit mysignal();
}
#include "widget.h"
#include <QApplication>

int main(int argc, char *argv[])
{
    QApplication a(argc, argv);
    Widget w;
    w.show();

    return a.exec();
}



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值