作业作业作业

server/2025/2/10 20:49:51/

优化登录框:

当用户点击取消按钮,弹出问题对话框,询问是否要确定退出登录,并提供两个按钮,yes|No,如果用户点击的Yes,则关闭对话框,如果用户点击的No,则继续登录

当用户点击的登录按钮,进行账号和密码的匹配,如果匹配成功,则弹出信息对话框,给出信息为,登录成功,并给出一个确定按钮,当用户点击该按钮后,关闭登录界面,弹出另一个界面

当账号和密码不匹配是,给出错误对话框,给出信息为账号和密码不匹配,是否重新登录,并提供两个按钮 Yes|No,如果用户点击了Yes,则清空密码框后,继续登录。如果用户点击的取消,则关闭登录界面

要求:静态成员函数版本和对象版本各至少实现一个

chatwidget.h:

#ifndef CHATWIDGET_H
#define CHATWIDGET_H#include <QWidget>
#include <QTextEdit>
#include <QLineEdit>
#include <QPushButton>namespace Ui {
class ChatWidget;
}class ChatWidget : public QWidget
{Q_OBJECTpublic:explicit ChatWidget(QWidget *parent = nullptr);~ChatWidget();private slots:void onSendClicked();private:Ui::ChatWidget *ui;QTextEdit *chatHistory;  // 显示聊天记录的文本框QLineEdit *inputMessage; // 输入消息的文本框
};#endif // CHATWIDGET_H

widget.h:

#ifndef WIDGET_H
#define WIDGET_H#include <QWidget>
#include <QLineEdit>QT_BEGIN_NAMESPACE
namespace Ui { class Widget; }
QT_END_NAMESPACEclass Widget : public QWidget
{Q_OBJECTpublic: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

chatwidget.cpp:

#include "chatwidget.h"
#include <QVBoxLayout>
#include <QMessageBox>
#include <QPushButton>
#include <QTextEdit>
#include <QLineEdit>ChatWidget::ChatWidget(QWidget *parent) :QWidget(parent)
{// 设置窗口标题setWindowTitle("聊天界面");// 设置窗口大小resize(400, 500);// 创建垂直布局QVBoxLayout *layout = new QVBoxLayout(this);// 创建显示聊天记录的 QTextEditchatHistory = new QTextEdit(this);chatHistory->setReadOnly(true); // 设置为只读layout->addWidget(chatHistory);// 创建输入框inputMessage = new QLineEdit(this);inputMessage->setPlaceholderText("输入消息...");layout->addWidget(inputMessage);// 创建发送按钮QPushButton *sendButton = new QPushButton("发送", this);layout->addWidget(sendButton);// 连接发送按钮点击事件connect(sendButton, &QPushButton::clicked, this, &ChatWidget::onSendClicked);// 设置布局setLayout(layout);
}ChatWidget::~ChatWidget()
{
}void ChatWidget::onSendClicked()
{QString message = inputMessage->text().trimmed();if (!message.isEmpty()) {// 将消息添加到聊天记录chatHistory->append("我: " + message);inputMessage->clear(); // 清空输入框} else {QMessageBox::warning(this, "消息为空", "请输入消息后再发送!");}
}

widget.cpp:

#include "widget.h"
#include "ui_widget.h"
#include <QVBoxLayout>
#include <QLabel>
#include <QLineEdit>
#include <QPushButton>
#include <QMessageBox>
#include <QCheckBox>
#include <QDebug>
#include "chatwidget.h"  // 引入聊天界面的头文件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)){QMessageBox::information(this,"消息对话框","登录成功",QMessageBox::Yes);emit jumpToMainWindow(); // 发射跳转信号this->close(); // 关闭当前窗口ChatWidget *chatWidget = new ChatWidget();chatWidget->show();  // 显示聊天界面}else{int res = QMessageBox::warning(this,"登录失败","给出信息为账号和密码不匹配,是否重新登录",QMessageBox::Yes | QMessageBox::No);if(res == QMessageBox::Yes){passwordEdit->clear(); // 清空密码框passwordEdit->setFocus(); // 将焦点设置回密码框}else if(res == QMessageBox::No){this->close(); // 关闭当前窗口}}
}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()
{QMessageBox box(QMessageBox::Question,"问题对话框","您确定要取消登录",QMessageBox::Yes | QMessageBox::No,this);int res = box.exec();if(res == QMessageBox::Yes){this->close(); // 关闭当前窗口}}

main.cpp:

#include "widget.h"#include <QApplication>int main(int argc, char *argv[])
{QApplication a(argc, argv);Widget w;w.show();return a.exec();
}


http://www.ppmy.cn/server/166574.html

相关文章

如何在Android Studio中开发一个简单的Android应用?

Android Studio是开发Android应用的官方集成开发环境&#xff08;IDE&#xff09;&#xff0c;它提供了许多强大的功能&#xff0c;使得开发者能够高效地创建Android应用。如果你是Android开发的初学者&#xff0c;本文将引导你如何在Android Studio中开发一个简单的Android应用…

MySql --- 作业

一. 触发器 1建立两个表:goods(商品表)、orders(订单表) mysql> create database mydb16_tigger; Query OK, 1 row affected (0.01 sec)mysql> use mydb16_tigger; Database changed mysql> mysql> CREATE TABLE goods (-> gid CHAR(8) PRIMARY KEY,->…

视频采集卡接口

采集卡的正面有MIC IN、LINE IN以及AUDIO OUT三个接口&#xff0c; MIC IN为麦克风输入&#xff0c;我们如果要给采集到的视频实时配音或者是在直播的时候进行讲解&#xff0c;就可以在这里插入一个麦克风&#xff0c; LINE IN为音频线路输入&#xff0c;可以外接播放背景音乐…

Java语言的区块链

Java语言的区块链&#xff1a;深入探索与实践 在当今数字化迅猛发展的时代&#xff0c;区块链技术正逐渐成为各个行业变革的核心力量。作为一种分布式账本技术&#xff0c;区块链以其去中心化、透明性和安全性等特点&#xff0c;彻底改变了我们对数据存储和事务处理的传统认知…

Docker 和 Docker Compose

Docker 和 Docker Compose 是两个相关但用途不同的工具&#xff0c;它们在容器化应用的管理和部署中扮演不同的角色。以下是它们的核心区别&#xff1a; 1. 功能定位 Docker: 是一个容器化平台&#xff0c;用于创建、运行和管理单个容器。适用于单个容器应用的开发和测试。通过…

【网络安全学习笔记】传输层协议 UDP 与 TCP

&#x1f91f; 基于入门网络安全/黑客打造的&#xff1a;&#x1f449;黑客&网络安全入门&进阶学习资源包 目录 一&#xff1a;&#x1f525; 前置复盘 &#x1f98b; 传输层&#x1f98b; 再谈端口号&#x1f98b; 端口号范围划分&#x1f98b; 认识知名端口号 (Wel…

登录功能login.html

文章目录 前言一、login.html二、getVerify()controllerlogin() 登录功能encodePwd(pwd,key)login.do验证是否异地登录找回账号verifySubmit() 前言 登录login.html&#xff0c;验证码获取verifycode&#xff0c;登陆函数login() 一、login.html <!DOCTYPE html> <h…

JVM 知识总结

1. JVM 概述 Java 虚拟机&#xff08;JVM&#xff09;是 Java 程序的运行环境&#xff0c;负责将 Java 字节码转换为机器码并执行。JVM 是 Java 跨平台特性的核心&#xff0c;它使得 Java 程序可以在不同的操作系统上运行&#xff0c;而无需修改代码。 2. JVM 架构 JVM 主要由…