作业:完善对话框,点击登录对话框,如果账号和密码匹配,则弹出信息对话框,给出提示”登录成功“,提供一个Ok按钮,用户点击Ok后,关闭登录界面,跳转到其他界面
如果账号和密码不匹配,弹出错误对话框,给出信息”账号和密码不匹配,是否重新登录“,并提供两个按钮Yes|No,用户点击Yes后,清除密码框中的内容,继续让用户进行登录,如果用户点击No按钮,则直接关闭登录界面
如果用户点击取消按钮,则弹出一个问题对话框,给出信息”您是否确定要退出登录?“,并给出两个按钮Yes|No,用户迪纳基Yes后,关闭登录界面,用户点击No后,关闭对话框,继续执行登录功能
要求:基于属性版和基于静态成员函数版至少各用一个
主函数
#include "mainwindow.h"
#include <second.h>
#include <QApplication>
int main(int argc, char *argv[])
{
QApplication a(argc, argv);
MainWindow w;
Second s; //实例化一个Second的s界面
//使用connect函数吧第一个界面的自定义信号和第二个界面的槽函数连接起来
QWidget::connect(&w,&MainWindow::my_signals, &s, &Second::my_slots);
w.show();
return a.exec();
}
第一个界面的头文件
#ifndef MAINWINDOW_H
#define MAINWINDOW_H
#include <QMainWindow>
#include <QDebug>
#include <QString>
#include <QMessageBox>
QT_BEGIN_NAMESPACE
namespace Ui { class MainWindow; }
QT_END_NAMESPACE
class MainWindow : public QMainWindow
{
Q_OBJECT
public:
MainWindow(QWidget *parent = nullptr);
~MainWindow();
signals:
void my_signals(); //此界面的自定义信号
private:
Ui::MainWindow *ui;
public slots:
void cancel_slot();
void login_slot();
};
#endif // MAINWINDOW_H
第一个界面的构造函数
#include "mainwindow.h"
#include "ui_mainwindow.h"
MainWindow::MainWindow(QWidget *parent)
: QMainWindow(parent)
, ui(new Ui::MainWindow)
{
ui->setupUi(this);
//设置纯净窗口
this->setWindowFlag(Qt::FramelessWindowHint);
//设置标签的背景图片
ui->logolabel->setPixmap(QPixmap(":/pictrue/logo.png"));
//图片自适应
ui->logolabel->setScaledContents(true);
ui->usernamelabel->setPixmap(QPixmap(":/pictrue/userName.jpg"));
ui->usernamelabel->setScaledContents(true);
ui->pasworldlabel->setPixmap(QPixmap(":/pictrue/passwd.jpg"));
ui->pasworldlabel->setScaledContents(true);
//设置行编辑器的占位
ui->paswordedit->setPlaceholderText("密码");
ui->usernameedit->setPlaceholderText("账号");
//把密码行编辑器设置为密码模式
ui->paswordedit->setEchoMode(QLineEdit::Password);
//取消按键的信号和槽的连接qt4
connect(ui->cancelbtn,SIGNAL(clicked()),this,SLOT(cancel_slot()));
//登录按键的信号和槽的连接qt5
connect(ui->loginbtn,&QPushButton::clicked,this,&MainWindow::login_slot);
}
MainWindow::~MainWindow()
{
delete ui;
}
//取消按钮关闭窗口
void MainWindow::cancel_slot()
{
//实例化一个问题对话框并初始化
QMessageBox msg(QMessageBox::Question,
"问题",
"您是否确定要退出登录?",
QMessageBox::Yes | QMessageBox::No,
this);
int res = msg.exec();
if(res == QMessageBox::Yes)
{
this->close();
}
}
void MainWindow::login_slot()
{
//实例化一个信息框并初始化
QMessageBox msg(QMessageBox::Information,
"登录",
"登录成功",
QMessageBox::Ok,
this);
//获取行编辑器的文本进行比较
if(ui->usernameedit->text()=="admin"&&ui->paswordedit->text()=="123456")
{
int res = msg.exec(); //信息框调用函数展示出来
if(res == QMessageBox::Ok)
{
this->close();
emit this->my_signals(); //自定义的信号需要用emit触发
}
}
else
{
//使用静态成员函数弹出错误对话框
int res = QMessageBox::critical(this,
"错误",
"账号和密码不匹配,是否重新登录",
QMessageBox::Yes|QMessageBox::No);
if(res == QMessageBox::Yes)
{
ui->paswordedit->setText("");
}
else
{
this->close();
}
}
}
第二个界面的头文件
#ifndef SECOND_H
#define SECOND_H
#include <QWidget>
namespace Ui {
class Second;
}
class Second : public QWidget
{
Q_OBJECT
public:
explicit Second(QWidget *parent = nullptr);
~Second();
//第二个界面的槽函数
public slots:
void my_slots();
private slots:
void on_pushButton_clicked();
private:
Ui::Second *ui;
};
#endif // SECOND_H
第二个界面的构造函数
#include "second.h"
#include "ui_second.h"
Second::Second(QWidget *parent) :
QWidget(parent),
ui(new Ui::Second)
{
ui->setupUi(this);
//设置纯净窗口
this->setWindowFlag(Qt::FramelessWindowHint);
}
Second::~Second()
{
delete ui;
}
void Second::my_slots()
{
this->show();
}
void Second::on_pushButton_clicked()
{
this->close();
}
运行程序
登录成功后
登录失败后
取消登录后