[分布式即时通讯系统] 注册类完善

我们在qss里添加err_tip样式,根据不同的状态做字体显示

cpp 复制代码
#err_tip[state='normal']{
   color: green;
}
#err_tip[state='err']{
   color: red;
}

接下来项目中添加global.h和global.cpp文件,global.h声明repolish函数,global.cpp用来定义这个函数。

.h中的声明

cpp 复制代码
#ifndef GLOBAL_H
#define GLOBAL_H
#include <QWidget>
#include <functional>
#include "QStyle"

extern std::function<void(QWidget*)> repolish;

#endif // GLOBAL_H

.cpp中的定义

cpp 复制代码
#include "global.h"

std::function<void(QWidget*)> repolish =[](QWidget *w){
    w->style()->unpolish(w);
    w->style()->polish(w);
};

这里要注意的是,因为我们的global.h文件会被包含在多个.cpp文件中,因此我们的repolish包装器的声明和定义需要分开来,否则在链接的时候会报重定义的错。

extern 关键字用于声明一个变量或函数是在另一个文件或同一个文件的其他位置定义的。

在Register的构造函数中添加样式设置。

cpp 复制代码
ui->err_tip->setProperty("state","normal");
repolish(ui->err_tip);

接下来实现获取验证码的逻辑,ui里关联get_code按钮的槽事件,并实现槽函数

cpp 复制代码
void RegisterDialog::on_get_code_clicked()
{
    // 检查用户输入是否正确
    // 验证邮箱的正则表达式
    auto email = ui->email_edit->text();
    QRegularExpression regex(R"((\w+)(\.|_)?(\w*)@(\w+)(\.(w+))+)");
    bool match = regex.match(email).hasMatch();
    if (match) {
        // 发送http验证码
    }
    else {
        // 提示用户邮箱格式不正确,采用tr函数可以实现转语言
        showTip(tr("邮箱格式不正确"), false);
    }
}

在RegisterDialog中添加showTip函数

cpp 复制代码
void RegisterDialog::showTip(QString str, bool b_ok)
{
    if(b_ok){
        ui->err_tip->setProperty("state","err");
    }else{
        ui->err_tip->setProperty("state","normal");
    }
    ui->err_tip->setText(str);
    repolish(ui->err_tip);
}
相关推荐
方方洛1 小时前
ray教程-28-附录G-CICD与Slurm与云上调度
人工智能·分布式·机器学习
空奈qwq4 小时前
【Kafka 从入门到实战】从手写一个队列到生产级消息中间件:架构、分区、消费组、零拷贝全解析
分布式·架构·kafka
山甫aa1 天前
锁一篇搞定:乐观锁、悲观锁、CAS、数据库锁与分布式锁【从零开始的 Web 后端学习】
java·数据库·分布式·后端·学习·web
严肃小白兔2 天前
Cloudflare Durable Objects 支持自动重试:分布式调用如何避免重复执行?
分布式
方方洛2 天前
ray教程-27-附录F-RayClient与runtime_env与多语言
人工智能·分布式·机器学习
方方洛3 天前
ray教程-25-附录E-端到端实战案例
人工智能·分布式·机器学习
迅翼SwiftWing4 天前
编队系列(二)|固定翼如何依靠邻居信息保持队形?一致性控制、通信拓扑与分布式仿真实现,附仿真代码
分布式
ly76894 天前
幂等消费者与重试副作用:Kafka 端点接入时的去重边界
分布式·kafka·linq·apache camel·幂等消费者·重试副作用·去重边界
qq_452396234 天前
第三篇:《从 ZooKeeper 到 KRaft 的迁移实战:前置条件、三阶段流程与回滚策略》
分布式·zookeeper·云原生
真上帝的左手5 天前
30. 技术专题-‌应用框架组件-关系型数据库-MySQL-Mybatis
数据库·分布式·mysql·中间件·mybatis