Qt-登录界面信号与槽函数

接着:https://blog.csdn.net/tiydy/article/details/83240223

Qt信号与槽函数可以实现任意两个Qt类的对象之间进行通信,比如登录类QtLoginWin 与界面上的登录按钮loginBt

当点击按钮的时候会发送clicked信号,这样就可以与QtLoginWin的槽函数关联进行通信如下图:

Qt-登录界面信号与槽函数_第1张图片

把控件的名字分别修改为

用户输入:userEdit,   密码输入:passEdit, 注册:registerBt, 登录:loginBt (修改方法如下, 选择对应的按钮修改属性objectName)

Qt-登录界面信号与槽函数_第2张图片

修改qtloginwin.h

#ifndef QTLOGINWIN_H
#define QTLOGINWIN_H

#include 

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

你可能感兴趣的:(Qt)