作业作业作业

优化登录框:

当用户点击取消按钮,弹出问题对话框,询问是否要确定退出登录,并提供两个按钮,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_OBJECT

public:
    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_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

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);

    // 创建显示聊天记录的 QTextEdit
    chatHistory = 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();
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值