1.
头文件
widget.h
#ifndef WIDGET_H
#define WIDGET_H
#include
#include
#include
#include
#include
#include
#include
class Widget : public QWidget
{
Q_OBJECT
public:
Widget(QWidget *parent = nullptr);
~Widget();
QPushButton *loginbutton;
QPushButton *cancelbutton;
QLineEdit * Username;
QLineEdit * pwd;
QLabel *lab1;
QLabel *lab2;
QLabel *logo;
QMovie *movie1;
public slots:
void cancelBtton_slot(); //取消登录的槽函数
void loginbutton_slot(); //成功的登录的槽函数
signals:
void jump(); //跳转信号
};
#endif // WIDGET_H
newwidget
#ifndef NEWWIDGET_H
#define NEWWIDGET_H
#include
namespace Ui {
class newwidget;
}
class newwidget : public QWidget
{
Q_OBJECT
public:
explicit newwidget(QWidget *parent = nullptr);
~newwidget();
public slots:
void jump_slot(); //跳转界面的槽函数
private:
Ui::newwidget *ui;
};
#endif // NEWWIDGET_H
main
#include "widget.h"
#include "newwidget.h"
#include
int main(int argc, char *argv[])
{
QApplication a(argc, argv);
Widget w;
w.show();
newwidget s;
//连接两个界面的信号与槽
QObject::connect(&w, &Widget::jump, &s, &newwidget::jump_slot);
return a.exec();
}
widget.cpp
#include "widget.h"
Widget::Widget(QWidget *parent)
: QWidget(parent)
{
// 固定界面的大小
this->setFixedSize(800,800);
// 设置透明度为0.8
this->setWindowOpacity(0.9);
// 设置窗口标题
this->setWindowTitle("新爷聊天室");
// 设置窗口图标
this->setWindowIcon(QIcon(":/icon/labixiaoxin.jpg"));
// 设置输入输出文本框(将密码文本设置成密文)
Username = new QLineEdit(this); // 账户
Username->resize(300,40); // 设置文本框大小
Username->move(250,450);
Username->setPlaceholderText("账户");
pwd = new QLineEdit(this); // 密码
pwd->resize(300,40);
pwd->move(250,500);
pwd->setEchoMode(QLineEdit::Password);
pwd->setPlaceholderText("密码");
// 设置登录和取消按钮(图标形式)
loginbutton = new QPushButton(this);
cancelbutton = new QPushButton(this);
loginbutton->setText("登录");
cancelbutton->setText("取消");
loginbutton->resize(80,30);
cancelbutton->resize(80,30);
loginbutton->move(300,550);
cancelbutton->move(400,550);
loginbutton->setIcon(QIcon(":/icon/denglu_1.png"));
cancelbutton->setIcon(QIcon(":/icon/quxiao.png"));
// 将账户和密码设置成图标形式
lab1 = new QLabel(this);
lab2 = new QLabel(this);
lab1->resize(40,40);
lab2->resize(40,40);
lab1->move(200,450);
lab2->move(200,500);
lab1->setScaledContents(true);
lab2->setScaledContents(true);
lab1->setPixmap(QPixmap(":/icon/denglu.png"));
lab2->setPixmap(QPixmap(":/icon/denglumima.png"));
// 设置登录窗口的logo
movie1 = new QMovie(":/icon/tubiao.gif");
logo = new QLabel(this);
logo->resize(700,350);
logo->move(50,0);
logo->setMovie(movie1);
movie1->start();
logo->setScaledContents(true);
//基于qt4版本的连接,将取消按钮连接到自定义的槽函数中处理相关逻辑
connect(cancelbutton,SIGNAL(clicked()),this,SLOT(cancelBtton_slot()));
//基于qt5链接的登录信号
connect(loginbutton,&QPushButton::clicked,this,&Widget::loginbutton_slot);
}
Widget::~Widget()
{
}
void Widget::cancelBtton_slot() //取消登录
{
this->close();
}
void Widget::loginbutton_slot() //登录成功
{
QString username = Username->text();
QString Pwd = pwd->text();
if (username == "admin" && Pwd == "888888")
{
emit this->jump();
qDebug()<<"登录成功";
this->close();
}else
{
qDebug()<<"登录失败,请重新登录";
pwd->clear();
}
}
newwidget.cpp
#include "newwidget.h"
#include "ui_newwidget.h"
newwidget::newwidget(QWidget *parent) :
QWidget(parent),
ui(new Ui::newwidget)
{
ui->setupUi(this);
}
newwidget::~newwidget()
{
delete ui;
}
void newwidget::jump_slot()
{
this->show();
}
2.
工程管理文件
QT += core gui
#表示引入qt所需要的类库,如核心库,图形化界面库
greaterThan(QT_MAJOR_VERSION, 4): QT += widgets
#如果超过4.0版本,系统会自动加上widigets库
CONFIG += c++11
#该版本的qt支持C++后的语法
# The following define makes your compiler emit warnings if you use
# any Qt feature that has been marked deprecated (the exact warnings
# depend on your compiler). Please consult the documentation of the
# deprecated API in order to know how to port your code away from it.
DEFINES += QT_DEPRECATED_WARNINGS
# You can also make your code fail to compile if it uses deprecated APIs.
# In order to do so, uncomment the following line.
# You can also select to disable deprecated APIs only up to a certain version of Qt.
#DEFINES += QT_DISABLE_DEPRECATED_BEFORE=0x060000 # disables all the APIs deprecated before Qt 6.0.0
#管理源文件
SOURCES += \
main.cpp \
widget.cpp
#管理头文件
HEADERS += \
widget.h
#管理ui文件
FORMS += \
widget.ui
# Default rules for deployment.
qnx: target.path = /tmp/$${TARGET}/bin
else: unix:!android: target.path = /opt/$${TARGET}/bin
!isEmpty(target.path): INSTALLS += target
头文件
#ifndef WIDGET_H
#define WIDGET_H //防止文件重复包含
#include //所需头文件
QT_BEGIN_NAMESPACE
namespace Ui { class Widget; } //将ui界面对应的头文件中的命名空间进行声明
QT_END_NAMESPACE
//自定义类名
class Widget : public QWidget
{
Q_OBJECT //信号与槽的元对象
public:
Widget(QWidget *parent = nullptr);//构造函数的声明
~Widget();//析构函数
private:
Ui::Widget *ui; //使用ui界面对应头文件中命名空间中的类定义的指针
//后期如果想要使用ui界面拖拽出来的组件,可以通过该指针找到
//自己类中定义的组价,后期需要用this指针找到
};
#endif // WIDGET_H
源文件
#include "widget.h"//引入自定义的头文件
#include "ui_widget.h"//引入ui界面的头文件
Widget::Widget(QWidget *parent)
: QWidget(parent)//调用父类的有参构造
, ui(new Ui::Widget)//构造出ui界面拖拽的成员,并且将地址赋值给ui指针
{
ui->setupUi(this);//调用设置界面函数,给ui界面上的组件申请空间
}
//析构函数的定义
Widget::~Widget()
{
delete ui; //释放ui界面上的组件空间
}
主函数
#include "widget.h" //将自定义的头文件导入
#include //引用应用程序的头文件
int main(int argc, char *argv[]) //主函数
{
QApplication a(argc, argv); //使用应用程序类,实例化一个类对象,调用有参构造
//使用自定义的类实例化的对象
Widget w; //调用无参构造函数,实例化一个界面,该界面没有父组件独立存在,别的组件依附于该界面而存在
w.show(); //将图形化界面展示出来
return a.exec(); //阻塞等待界面的相关响应工作:用户界面上的操作,信号与槽,事件处理
}
思维导图