QT Core | 信号槽01 - GUI上按钮触发应用程序里某个类的函数

本文介绍了如何使用QT框架创建项目,重点讲解了信号与槽机制,通过一个简单的GUI按钮控制Printer类的print_someing槽函数,展示了QT中观察者模式的应用。详细步骤包括新建QT项目、添加Printer类以及编写和连接信号与槽的代码。通过这个实例,读者可以更好地理解和应用QT的信号与槽机制。
摘要由CSDN通过智能技术生成

一、前言


信号与槽是QT框架引以为豪的机制之一。熟练使用和理解信号与槽,就能够设计出解耦的非常漂亮的程序,有利于增强我们的技术设计能力。

所谓信号与槽,实际就是观察者模式。对信号与槽的详细介绍,请一定要查看博客:https://www.devbean.net/2012/08/qt-study-road-2-signal-slot/

这个博文的目的是使用GUI上的一个按钮(控件)触发应用程序的函数。首先信号与槽的用法一般有两种:第一种,GUI上的控件(信号)控制应用程序干一些事情(函数)。第二种,应用程序的函数(信号)控制应用程序里的其他函数(槽),本次实验是第一种用法。

记住,信号和槽本质都是返回类型为void的函数

二、新建一个QT项目


2.1、New File or Project

在这里插入图片描述

2.2、Location

在这里插入图片描述

2.3、Kits

在这里插入图片描述

2.4、Details

在这里插入图片描述

2.5、汇总

在这里插入图片描述

2.6、项目文件

在这里插入图片描述

2.7、pro文件

我一般使用C++14标准,而QT默认是C++11标准。所以,需要在pro文件上添加一个语句。
在这里插入图片描述

三、添加printer类


这个类很简单,它只有一个功能,就是将自己的名字print出去。

3.1、添加新文件

在这里插入图片描述

3.2、文件和类

在这里插入图片描述

3.3、Define Class

在这里插入图片描述

3.4、Summary

在这里插入图片描述

四、编写代码


4.1、printer.h

#ifndef PRINTER_H
#define PRINTER_H

#include <QObject>
#include <QDebug>   /* 要使用qDebug() */

class Printer : public QObject
{
    Q_OBJECT
public:
    explicit Printer(QObject *parent = nullptr);
		/* 重载一个构造函数 */
    Printer(const QString& name);  

signals:

public slots:
    /* 定义一个槽函数 */
    void print_someing(bool A) const;

private:
    QString my_name;
};

#endif // PRINTER_H

4.2、printer.c

#include "printer.h"

Printer::Printer(QObject *parent) : QObject(parent)
{

}

Printer::Printer(const QString& name):my_name(name)
{
}

/* 槽函数的实现
 * 1、为什么需要用一个bool类型的入口参数?是因为按钮(信号)那边会发出一个bool变量过来,且QT规定槽函数的入口参数的个数必须大于等于信号那一边。
 */
void Printer::print_someing(bool A) const
{
    qDebug() << "My name is:" << this->my_name;
}

在这里插入图片描述

4.3、main.cpp

#include "mainwindow.h"
#include <QApplication>
#include <QPushButton>
#include <QDebug>
#include "printer.h"

int main(int argc, char *argv[])
{
    QApplication a(argc, argv);
    //MainWindow w;

    QPushButton button("click");

    Printer printer_A("printer_A");  /* 创建printer_A对象 */

    /* 将按钮(信号)与函数(槽)连接起来 */
    QObject::connect(&button,&QPushButton::clicked,&printer_A,&Printer::print_someing);

    button.show();
    //w.show();

    return a.exec();
}

编译,生成程序。

五、Debug


在这里插入图片描述
在这里插入图片描述

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Wallace Zhang

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值