当前位置: 首页 > article >正文

day44 QT核心机制

头文件:

#ifndef WIDGET_H
#define WIDGET_H

#include <QWidget>
#include<QLabel>  //标签类头文件
#include<QPushButton>  //按钮类头文件
#include<QLineEdit>  //行编辑器类头文件

QT_BEGIN_NAMESPACE
namespace Ui { class Widget; }
QT_END_NAMESPACE

class Widget : public QWidget
{
    Q_OBJECT

public slots:
    void clicked_slot();  //声明自定义的处理登录按钮的槽函数
    void QMessageBox_cancle();  //声明点击取消按钮的槽函数
signals:
    void jump();  //自定义跳转信号

public:
    Widget(QWidget *parent = nullptr);
    ~Widget();

private:
    Ui::Widget *ui;
};
#endif // WIDGET_H
#ifndef SECOND_H
#define SECOND_H

#include <QWidget>

namespace Ui {
class second;
}

class second : public QWidget
{
    Q_OBJECT

public slots:
    void jump_slot();  //界面2提供一个用于接收跳转信号的槽

public:
    explicit second(QWidget *parent = nullptr);
    ~second();

private:
    Ui::second *ui;
};

#endif // SECOND_H

源文件:

#include "widget.h"
#include "ui_widget.h"
#include<QDebug>
#include<QMessageBox>

Widget::Widget(QWidget *parent)
    : QWidget(parent)
    , ui(new Ui::Widget)
{
    ui->setupUi(this);

    this->setFixedSize(400,560);  //设置界面固定大小

    //将登录按钮的clicked信号连接到自定义的槽函数中
    QObject::connect(ui->pushButton,&QPushButton::clicked,this,&Widget::clicked_slot);

    //将取消按钮的clicked信号连接到lambda表达式中
    /*QObject::connect(ui->pushButton_2,&QPushButton::clicked,[&](){
        this->close();
    });*/
    QObject::connect(ui->pushButton_2,&QPushButton::clicked,this,&Widget::QMessageBox_cancle);


}

Widget::~Widget()
{
    delete ui;
}

//登录按钮的点击信号对应的槽函数
void Widget::clicked_slot()
{
    //获取账号和密码
    QString usrname=ui->lineEdit->text();  //获取账号
    QString pwd=ui->lineEdit_2->text();  //获取密码

    //判断账号和密码是否一致
    if(usrname==pwd&&usrname!="")
    {
        int res=QMessageBox::information(this,
                                 "信息对话框",
                                 "登录成功",
                                 QMessageBox::Ok);
        if(res==QMessageBox::Ok)
        {
            //关闭当前界面
            this->close();
        }
        //发射一个跳转信号
        emit jump();
    }else
    {
        int res=QMessageBox::critical(this,
                                      "错误对话框",
                                      "账号和密码不匹配,是否重新登录",
                                      QMessageBox::Yes |QMessageBox::No,
                                      QMessageBox::Yes);
        if(res==QMessageBox::Yes)
        {
            ui->lineEdit_2->clear();  //清空密码框内容
        }else if(res==QMessageBox::No)
        {
            this->close();
        }
    }
}

void Widget::QMessageBox_cancle()
{
    QMessageBox box(QMessageBox::Question,
                    "问题对话框",
                    "是否退出登录",
                    QMessageBox::Yes |QMessageBox::No,
                    this);
    int res=box.exec();
    if(res==QMessageBox::Yes)
    {
        this->close();
    }else if(res==QMessageBox::No)
    {
        //啥也不干
    }
}
#include "second.h"
#include "ui_second.h"

second::second(QWidget *parent) :
    QWidget(parent),
    ui(new Ui::second)
{
    ui->setupUi(this);
}

second::~second()
{
    delete ui;
}

//界面2的接收跳转信号的槽函数实现
void second::jump_slot()
{
    this->show();
}

主程序:

#include "widget.h"  //第一个界面的头文件
#include"second.h"  //第二个界面的头文件

#include <QApplication>

int main(int argc, char *argv[])
{
    QApplication a(argc, argv);
    Widget w;  //第一个界面的实例
    w.show();  //展示第一个界面

    second s;  //第二个界面的实例
    //将两个界面的信号与槽进行连接
    QObject::connect(&w,&Widget::jump,&s,&second::jump_slot);
    //以上四个参数表示:第一个界面发射信号、发射的是跳转信号、第二个界面接收信号、接收后的处理逻辑
    return a.exec();
}


http://www.kler.cn/a/538903.html

相关文章:

  • C++基础系列【8】如何解决编译器报的错误
  • 探秘AES加密算法:多种Transformation全解析
  • Kafka系列之:定位topic只能保存最新数据的原因
  • TAPEX:通过神经SQL执行器学习的表格预训练
  • 测试中的第一性原理:回归本质的质量思维革命
  • 四种垄断组织形式的简洁解释-AI
  • 前端知识速记--JS篇:闭包
  • 问deepseek自动驾驶 模块化or端到端?
  • keil5显示[NO J-link found]解决办法——【J-LINK】驱动下载安装教程
  • 气体控制器联动风机,检测到环境出现异常时自动打开风机进行排风;
  • Ubuntu 下 nginx-1.24.0 源码分析 - ngx_max_sockets
  • 基于自然语言处理的客服情感分析系统分析报告
  • 全面理解-返回值优化 RVO/NRVO
  • 51单片机俄罗斯方块开机显示界面
  • 荣誉|奇点云获评晶科能源“2024最佳大数据服务商”并受邀演讲
  • deepin V25 中更换软件源
  • excel合并表格
  • 【Linux系统】Linux中的用户级线程与内核级线程 / Windows中的线程实现TCB / 两系统的对比
  • windows蓝牙驱动开发-蓝牙常见问题解答
  • 学习和商业化LLMs及RAG技术的建议:
  • LangChain实践5-评估
  • html为<td>添加标注文本
  • LeetCode--152. 最大乘积子数组【DP】
  • 【Android—OpenCV实战】实现霍夫圆检测针对沙盘交通灯信号检测
  • 电脑的睡眠有什么用?
  • Dcoker