目录
Push Button
双击打开设计
拖动Push Button,右侧属性与值的位置修改名字:
切换到原文件使用(ui就说明是设计文件):
调用connect连接到一起,当Qt检测到closeButton被按下了,则调用MainWindow中的close方法。
connect(ui->closeBtn,&QPushButton::clicked,this,&MainWindow::close); //&信号函数地址,接收者,&当前窗口类型
自定义信号槽
要求:
1.信号是类的成员函数
2.返回值是void类型
3.信号的名字可以根据实际情况进行指定
4.参数可以随意指定,信号也支持重载
5.信号需要使用signals关键字进行声明,使用方法类似于public等关键字
6.信号函数只需要声明,不需要定义
7.发送信号就相当于调用了信号函数,习惯加emit声明被发送(相当于宏定义)
8.要使用Q_OBJECT宏
自定义槽
1.返回值是void
2.槽也是函数,需要支持重载
3.Qt中槽函数的类型:类的成员函数、全局函数、静态函数、匿名函数
4.槽函数可以使用关键字进行声明:slots(可以省略不写):public slots:,private slots:,protected slots:。其中后两者只能在类的内部使用。
举例
创建一个能让女朋友过生日的按钮,点击之后女朋友就过生日了,然后女朋友发出过生日的信号,我再送礼物。
添加新文件,创建类:
创建一个我类,一个女朋友类
女朋友类中的信号——过生日(头文件):
signals:
void birthday();
我类送礼物——非信号;
public slots:
void give();
在MainWindow头文件添加这两个头文件,并添加成员对象:
我要执行的是送礼物(别忘了添加qDebug头文件):
void Me::give()
{
qDebug()<<"我送你一份礼物";
}
点击按钮让女朋友过生日(实际上是点击按钮发送信号让女朋友过生日)——女朋友发送过生日的信号——我送礼物
于是在主函数里,需要将按钮的信号传给女朋友,让女朋友过生日,女朋友过生日再与我送礼物相连。
#include "mainwindow.h"
#include "ui_mainwindow.h"
#include<QDebug>
MainWindow::MainWindow(QWidget *parent)
: QMainWindow(parent)
, ui(new Ui::MainWindow)
{
ui->setupUi(this);
//创建了对象就要有初始化对象
m_me=new Me;
m_girl=new GirlFriend;
//对象关联,女朋友过生日的信号与我送礼物相连
connect(m_girl,&GirlFriend::birthday,m_me,&Me::give); //齐总birthday是自定义的,不能由框架发送,没有此存在,需要自己发射信号
//关联槽函数,让女朋友过生日的按钮与让女朋友发出信号相连
connect(ui->birthday,&QPushButton::clicked,this,&MainWindow::birthdaySlot);
connect(ui->closeBtn,&QPushButton::clicked,this,&MainWindow::close); //&信号函数地址,接收者,&当前窗口类型
}
MainWindow::~MainWindow()
{
delete ui;
}
void MainWindow::birthdaySlot()
{
//发射信号
emit m_girl->birthday();
}
按钮的创建就不说了,名称叫做birthday。
运行,点击生日: