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

周六调休!!

1> 手动将登录项目实现,不要使用拖拽编程

widget.h:

#ifndef WIDGET_H
#define WIDGET_H

#include <QWidget>
#include <QLineEdit>

QT_BEGIN_NAMESPACE
namespace Ui { class Widget; }
QT_END_NAMESPACE

class Widget : public QWidget
{
    Q_OBJECT

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

private:
    Ui::Widget *ui;
    QLineEdit *qqNumberEdit; // QQ号输入框
    QLineEdit *passwordEdit; // 密码输入框
    bool validateCredentials(const QString &qqNumber, const QString &password);
signals:
    void jumpToMainWindow(); // 跳转信号
private slots:
    void onLoginClicked();   // 登录按钮点击事件
    void onCancelClicked();  // 取消按钮点击事件
};
#endif // WIDGET_H

main.cpp:

#include "widget.h"

#include <QApplication>

int main(int argc, char *argv[])
{
    QApplication a(argc, argv);
    Widget w;
    w.show();
    return a.exec();
}

widget.cpp:

#include "widget.h"
#include "ui_widget.h"
#include <QVBoxLayout>
#include <QLabel>
#include <QLineEdit>
#include <QPushButton>
#include <QMessageBox>
#include <QCheckBox>
#include <QDebug>

Widget::Widget(QWidget *parent)
    : QWidget(parent)
{
    setWindowTitle("QQ Login");

    // 设置窗口大小
    resize(300, 400);

    // 设置背景颜色
    setStyleSheet("background-color: #F0F0F0;");

    // 创建垂直布局
    QVBoxLayout *layout = new QVBoxLayout(this);

    // 创建头像标签
    QLabel *avatarLabel = new QLabel(this);
    avatarLabel->setPixmap(QPixmap("D:\\tu\\yuan.jpg").scaled(100, 100, Qt::KeepAspectRatio));
    avatarLabel->setAlignment(Qt::AlignCenter);
    layout->addWidget(avatarLabel);

    // 创建QQ号输入框
    qqNumberEdit = new QLineEdit(this);
    qqNumberEdit->setPlaceholderText("输入QQ号码");
    qqNumberEdit->setStyleSheet("QLineEdit { padding: 10px; font-size: 16px; border-radius: 5px; border: 1px solid #CCC; }");
    layout->addWidget(qqNumberEdit);

    // 创建密码输入框
    passwordEdit = new QLineEdit(this);
    passwordEdit->setPlaceholderText("输入QQ密码");
    passwordEdit->setEchoMode(QLineEdit::Password);
    passwordEdit->setStyleSheet("QLineEdit { padding: 10px; font-size: 16px; border-radius: 5px; border: 1px solid #CCC; }");
    layout->addWidget(passwordEdit);

    // 添加间隔
    layout->addSpacing(10);  // 增加空白间隔

    // 创建复选框,表示是否同意服务协议
    QCheckBox *agreementCheckBox = new QCheckBox("我已阅读并同意服务协议和QQ隐私保护指引", this);
    agreementCheckBox->setStyleSheet("QCheckBox { color: #666; font-size: 12px; }");
    layout->addWidget(agreementCheckBox);

    // 添加间隔
    layout->addSpacing(10);  // 增加空白间隔


    // 创建登录按钮
    QPushButton *loginButton = new QPushButton("登录", this);
    loginButton->setStyleSheet("QPushButton { background-color: #4CAF50; color: white; padding: 10px; font-size: 16px; border-radius: 5px; }"
                               "QPushButton:hover { background-color: #45a049; }");
    layout->addWidget(loginButton);

    // 创建取消按钮
    QPushButton *cancelButton = new QPushButton("取消", this);
    cancelButton->setStyleSheet("QPushButton { background-color: #f44336; color: white; padding: 10px; font-size: 16px; border-radius: 5px; }"
                                "QPushButton:hover { background-color: #d32f2f; }");
    layout->addWidget(cancelButton);

    // 连接按钮点击事件
    connect(loginButton, &QPushButton::clicked, this, &Widget::onLoginClicked);
    connect(cancelButton, &QPushButton::clicked, this, &Widget::onCancelClicked);

    // 设置布局
    setLayout(layout);
}

Widget::~Widget()
{
}

void Widget::onLoginClicked()
{
    QString qqNumber = qqNumberEdit->text().trimmed(); // 去除前后空格
    QString password = passwordEdit->text().trimmed(); // 去除前后空格

    // 验证账号和密码
    if (validateCredentials(qqNumber, password))
    {
        qDebug()<<"登录成功";
        emit jumpToMainWindow(); // 发射跳转信号
        this->close(); // 关闭当前窗口
    }
    else
    {
        QMessageBox::warning(this, "登录失败", "账号或密码错误,请重试!");
        passwordEdit->clear(); // 清空密码框
        passwordEdit->setFocus(); // 将焦点设置回密码框
    }
}

bool Widget::validateCredentials(const QString &qqNumber, const QString &password)
{
    if (qqNumber.isEmpty() || password.isEmpty())
    {
        return false; // 账号或密码为空
    }

    if (password.length() < 6)
    {
        return false; // 密码太短
    }

    if (qqNumber == password)
    {
        return false; // 账号和密码相同
    }

    return true; // 验证通过
}

void Widget::onCancelClicked()
{
    this->close(); // 关闭当前窗口
}

二、思维导图:

三、C++题目


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

相关文章:

  • DeepSeek与llama本地部署(含WebUI)
  • C++, STL容器 array:固定大小数组深度解析
  • LabVIEW2025中文版软件安装包、工具包、安装教程下载
  • 学习threejs,pvr格式图片文件贴图
  • 大语言模型轻量化:知识蒸馏的范式迁移与工程实践
  • SpringUI Web高端动态交互元件库
  • 虚拟DOM与Diff算法:Vue如何高效更新UI?
  • java面向对象的程序设计,封装、继承、多态
  • 4. 【.NET 8 实战--孢子记账--从单体到微服务--转向微服务】--什么是微服务--微服务设计原则与最佳实践
  • MySQL主从复制原理及工作过程
  • [数据结构] Set的使用与注意事项
  • OpenBMC:可编译的硬件平台定义在哪
  • 安恒网安面试题来啦!
  • 模型压缩技术(一):模型蒸馏,给大模型“瘦身”
  • 软件设计模式
  • 自动化测试(selenium篇)
  • python怎么求 一个数是否包含3
  • WPF模板
  • Python应用指南:一个库解决常见的国内坐标系转换需求
  • 工厂模式+枚举类的json序列化+redisson的使用
  • 【深度学习】DataLoader自定义数据集制作
  • 海康威视豆干型网络相机QT的Demo
  • 【学习总结|DAY036】Vue工程化+ElementPlus
  • 华为小艺助手接入DeepSeek,升级鸿蒙HarmonyOS NEXT即可体验
  • Linux中DataX使用第三期
  • Java 8的Stream API