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函数也被调用了