周六调休!!
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(); // 关闭当前窗口
}
二、思维导图:![](https://i-blog.csdnimg.cn/direct/5dd758e4bd204922b6ce3688bcf70a86.png)
三、C++题目