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函数也被调用了
来源:CSDN
作者:用心把天空锁住
链接:https://blog.csdn.net/weixin_43124720/article/details/104033296