Qt学习记录--03 Qt的信号槽的使用

5 篇文章 0 订阅

一 前言:

       上篇文章中对Qt的信号槽进制作了简要介绍并对比了Qt5与Qt4中的差异,下面将通过实际代码举例说明信号槽的使用,谢谢支持。


二 代码:

        为了代码简介(少写代码~),笔者使用UI界面,如下:

                                               

        下面是代码:

// widget.h
#ifndef WIDGET_H
#define WIDGET_H

#include <QWidget>

namespace Ui {
class Widget;
}

class Widget : public QWidget
{
    Q_OBJECT

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

signals:
    //! 自定义信号
    void testSignal();

private slots:
    //! 自定义槽
    void setTextSlot();
    void testSlot();

private:
    Ui::Widget *ui;
};

#endif // WIDGET_H

// widget.cpp
#include "widget.h"
#include "ui_widget.h"
#include <QApplication>
#include <QMessageBox>

Widget::Widget(QWidget *parent) :
    QWidget(parent),
    ui(new Ui::Widget)
{
    ui->setupUi(this);

    //! 信号槽
    connect(ui->pushButton_Test, &QPushButton::clicked, this, &Widget::setTextSlot);
    connect(ui->pushButton_Quit, &QPushButton::clicked, &QApplication::quit);

    //! 关联自定义信号
    connect(this, &Widget::testSignal, &Widget::testSlot);
}

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

void Widget::setTextSlot()
{
    ui->label_show->setText(tr("Hei, 测试成功!"));
    
    //! 发出自定义信号
    emit testSignal();
}
void Widget::testSlot()
{
    QMessageBox::warning(NULL, tr("测试"),tr("自定义信号测试成功!"));
}
// main.cpp
#include "widget.h"
#include <QApplication>

int main(int argc, char *argv[])
{
    QApplication a(argc, argv);
    Widget w;
    w.show();
    return a.exec();
}
        以上代码中的connect()是使用了Qt5中新添加的实现的,个人感觉这样的使用比较符合逻辑,最重要的是增加了编译期间的错误检查。

        下面是Qt4下的实现:

    //! 信号槽
    connect(ui->pushButton_Test, SIGNAL(clicked(bool)), this, SLOT(setTextSlot()));
    //connect(ui->pushButton_Quit, SIGNAL(clicked(bool)), SLOT(QApplication::quit)); // 无能为力啊

    //! 关联自定义信号
    connect(this, SIGNAL(testSignal()), SLOT(testSlot()));

        由于Qt4中将信号和槽转换为char*作为的参数,无法将全局函数或者 Lambda 表达式传入connect()函数。

        信号,分为Qt预定义信号和用户自定义信号,针对预定义信号,只需直接和槽连接即可使用,自定义信号必须由用户使用emit 关键字(本质为宏定义)手动发送。自定义的信号无需用户对其进行实现,Qt内部在Moc阶段会进行标准化处理。

        ,也分为预定义槽和自定义,使用起来没啥区别,需注意,自定义的槽函数需要实现,其参数为信号函数的入参,会自动传递给槽函数。


三 运行结果:

                                                  

本次示例中的举例比较简单,仅供参考。




  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值