文章目录
一、前言
信号与槽是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