接着:https://blog.csdn.net/tiydy/article/details/83240223
Qt信号与槽函数可以实现任意两个Qt类的对象之间进行通信,比如登录类QtLoginWin 与界面上的登录按钮loginBt
当点击按钮的时候会发送clicked信号,这样就可以与QtLoginWin的槽函数关联进行通信如下图:
把控件的名字分别修改为
用户输入:userEdit, 密码输入:passEdit, 注册:registerBt, 登录:loginBt (修改方法如下, 选择对应的按钮修改属性objectName)
修改qtloginwin.h
#ifndef QTLOGINWIN_H
#define QTLOGINWIN_H
#include <QMainWindow>
namespace Ui {
class QtLoginWin;
}
class QtLoginWin : public QMainWindow
{
Q_OBJECT
public:
explicit QtLoginWin(QWidget *parent = 0);
~QtLoginWin();
private slots://槽函数声明--在.cpp中必须实现
void login_fun();//登录槽函数声明
void register_fun();//注册槽函数声明
void signals_test();//用来测试自定义信号使用
signals://信号声明--不需实现,后期直接通过emit 发送就可以了
void mysignals();
private:
Ui::QtLoginWin *ui;
};
#endif // QTLOGINWIN_H
修改qtloginwin.cpp文件
#include "qtloginwin.h"
#include "ui_qtloginwin.h"
#include <QDebug>
QtLoginWin::QtLoginWin(QWidget *parent) :
QMainWindow(parent),
ui(new Ui::QtLoginWin)
{
ui->setupUi(this);
//按钮信号与本类的槽函数关联
connect(ui->loginBt,SIGNAL(clicked(bool)), this, SLOT(login_fun()));
connect(ui->registerBt,SIGNAL(clicked(bool)),this, SLOT(register_fun()));
//本类对象自己发送信号与本类对象关联
connect(this, SIGNAL(mysignals()),this, SLOT(signals_test()));
}
QtLoginWin::~QtLoginWin()
{
delete ui;
}
void QtLoginWin::login_fun()
{
qDebug()<<"login";
//发送信号
emit mysignals();
}
void QtLoginWin::register_fun()
{
qDebug()<<"register";
//发送信号
emit mysignals();
}
void QtLoginWin::signals_test()
{
qDebug()<<"signal test";
}
当点击按钮的时候---login_fun,或者register_fun会调用, 在这两个槽函数中发送信号, 所以signals_test函数也被调用了