头文件:
#ifndef WIDGET_H
#define WIDGET_H //防止头文件重复包含
#include <QWidget>
QT_BEGIN_NAMESPACE
namespace Ui { class Widget; } //将其他文件中的命名空间进行声明
QT_END_NAMESPACE
//自定义的类的声明 公共继承自QWidget:QWidget
class Widget : public QWidget
{
Q_OBJECT //信号与槽的源对象
public:
Widget(QWidget *parent = nullptr); //构造函数的声明且带有默认参数
~Widget();
void onLoginClicked();
void onCancelClicked();
void clicked();
void clicked_1();
signals:
void jump();
void my_signal();
void my_signal_1(); //虚析构函数的声明
private:
Ui::Widget *ui; //成员属性:指针
};
#endif // WIDGET_H
源文件:
#include "widget.h"
#include "ui_widget.h"
#include <QPushButton>
#include <QLineEdit>
#include <QLabel>
#include <QMovie>
#include <QLineEdit>
#include <QApplication>
#include <QMessageBox>
#include <iostream>
#include <QDebug>
Widget::Widget(QWidget *parent) //定义有参构造函数
: QWidget(parent)
, ui(new Ui::Widget) //给自己类中的指针实例化空间
{
this->setFixedSize(520,520);//固定大小
//ui->setupUi(this); //将ui界面上拖拽的组件展示到this界面上
//按钮组件
this->setWindowTitle("QQ登录");
this->resize(520,520);
this->setStyleSheet("background-color:lightblue");
QPushButton *btn1 = new QPushButton;
btn1->setParent(this);
btn1->setText("登录");
btn1->resize(60,40);
btn1->move(150,300);
btn1->setStyleSheet("background-color:lightgreen");
QPushButton *btn2 = new QPushButton(this);
btn2->setText("取消");
btn2->resize(btn1->size());
btn2->move(300,300);
btn2->setStyleSheet("background-color:lightgreen");
//行编辑器
QLineEdit *edit1 = new QLineEdit;
edit1->setParent(this);
edit1->resize(250,30);
edit1->move(150,150);
edit1->setPlaceholderText("账号");
// edit1->setEchoMode(QLineEdit::Password);//隐式输入账号
QLineEdit *edit2 = new QLineEdit(this);
edit2->resize(edit1->size());
edit2->move(150,200);
edit2->setPlaceholderText("密码");
edit2->setEchoMode(QLineEdit::Password);
//创建标签
QLabel *lab1 = new QLabel;
lab1->setParent(this);
lab1->setText("账号:");
lab1->move(edit1->x()-60,edit1->y());
QLabel *lab2 = new QLabel("密码:",this);
lab2->move(edit2->x()-60,edit2->y());
connect(btn1, &QPushButton::clicked, this, &Widget::onLoginClicked);
connect(btn2, &QPushButton::clicked, this, &Widget::onCancelClicked);
connect(this,&Widget::my_signal,this,&Widget::clicked);
connect(this,&Widget::my_signal_1,this,&Widget::clicked_1);
}
Widget::~Widget() //定义析构函数
{
delete ui; //释放ui界面组件的空间
}
void Widget::onCancelClicked()//退出功能的槽函数
{
QMessageBox box(QMessageBox::Question,//图标,问题图标
"退出",//对话框标题
"请确定要退出吗?",//对话框文本内容
QMessageBox::Ok|QMessageBox::No,//对话框提供的按钮
this);//父组件
box.setButtonText(QMessageBox::Ok,"是");
box.setButtonText(QMessageBox::No,"否");
box.setDefaultButton(QMessageBox::No);
//显示对话框,返回用户点击的按钮值
int num = box.exec();
//判断用户点击的按钮值
if(num == QMessageBox::Ok)
{
qApp->quit();
}
}
void Widget::onLoginClicked()//登录功能的槽函数
{
QString usr = "88888";
QString pwd = "88888";
QString username = edit1->text();
QString password = edit2->text();
if ((username == usr) && (password == pwd))
{
emit my_signal();
}
else
{
emit my_signal_1();
}
}
void Widget::clicked()
{
QMessageBox::information(this, "登录成功","欢迎光临" QMessageBox::Ok);
this->close();
emit jump();//发射自定义跳转信号
}
void Widget::clicked_1()
{
QMessageBox msgBox(QMessageBox::Warning, "错误", "账号或密码错误,请重新输入",
QMessageBox::Ok, this);
msgBox.exec();
}
主文件:
#include "widget.h" //文件包含 自定义头文件
#include "second.h"
#include <QApplication> //包含应用程序的头文件
int main(int argc, char *argv[])
{
QApplication a(argc, argv); //使用应用程序类实例化对象并调用有参构造
Widget w; //使用自定义类调用无参构造在栈区生成一个界面对象
w.show(); //调用对象的成员函数展示界面
second s;
QObject::connect(&w,&Widget::jump,&s,&Second::jump_slot);
return a.exec(); //使用应用程序类对象并调用成员函数保证页面不被关闭
}