1> 将系统给定的工程文件相关代码全部进行注释
2> 将登录框的两个按钮进行实现,登录按钮需要手动连接自定义的槽函数,取消按钮右键转到槽
对于登录按钮对应的槽函数中实现:判断输入的账号是否等于"admin",密码是否为“123456”,如果匹配成功,则输出登录成功后关闭界面
如果匹配失败,输出账号和密码不匹配,请重新输入,并将密码框内容清空
对于取消按钮,在对应的槽函数中,关闭整个界面即可
工程文件
#工程项目包含的类库,core是核心库,gui是图形化界面库
QT += core gui
#4.0版本后,自动添加的widgets库
greaterThan(QT_MAJOR_VERSION, 4): QT += widgets
#表示支持C++
CONFIG += c++11
# 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
RESOURCES += \
icon.qrc
头文件
#ifndef WIDGET_H
#define WIDGET_H
#include <QWidget> //父类的头文件
#include <QDebug>
#include <QIcon>
#include <QLabel>
#include <QLineEdit>
#include <QPushButton>
QT_BEGIN_NAMESPACE
namespace Ui { class Widget; } //命名空间的声明,ui界面生成的头文件中的命名空间
QT_END_NAMESPACE
class Widget : public QWidget //自定义的类,继承自QWidget类
{
Q_OBJECT //管理信号和槽的元对象
signals:
void my_signal(); //信号函数,只有声明,没有定义
public slots:
void log_in(); //槽函数,有声明有定义
void log_out();
public:
Widget(QWidget *parent = nullptr); //构造函数声明
~Widget(); //析构函数声明
QLabel *lab1;
QLabel *lab2;
QLabel *lab3;
QLineEdit *edit1;
QLineEdit *edit2;
QPushButton *btn1;
QPushButton *btn2;
private:
Ui::Widget *ui; //指向ui界面的指针,如果使用了拖拽界面的组件,则需要该指针来找到
};
#endif // WIDGET_H
源文件
#include "widget.h"
#include "ui_widget.h"
Widget::Widget(QWidget *parent) //构造函数的实现
: QWidget(parent) //调用父类的构造函数
, ui(new Ui::Widget) //给指针成员初始化空间
{
ui->setupUi(this); //调用ui界面的设置界面函数
//设置窗口图标
this->setWindowIcon(QIcon(":/icon/QQ.png"));
//设置窗口标题
this->setWindowTitle("MyQQ");
//获取窗口的长宽
qDebug()<<this->size().width();
qDebug()<<this->size().height();
//设置标签
lab1 = new QLabel(this);
//设置图形标签
lab1->setPixmap(QPixmap("E:/c++&qt_code/QT/day2/04test/label1.jpg"));
lab1->resize(800,300); //设置大小
lab1->setScaledContents(true); //设置自适应
//设置账号标签
lab2 = new QLabel(this);
lab2->setPixmap(QPixmap(":/icon/zhanghao.png"));
lab2->resize(50,50); //设置大小
lab2->move(200,350); //设置位置
lab2->setScaledContents(true); //设置自适应
//设置密码标签
lab3 = new QLabel(this);
lab3->setPixmap(QPixmap(":/icon/denglumima.png"));
lab3->resize(50,50); //设置大小
lab3->move(200,450); //设置位置
lab3->setScaledContents(true); //设置自适应
//设置账号行编辑
edit1 = new QLineEdit(this);
edit1->move(300,350); //设置大小
edit1->resize(300,50); //设置位置
edit1->setPlaceholderText("账号");
//设置密码行编辑
edit2 = new QLineEdit(this);
edit2->move(300,450); //设置大小
edit2->resize(300,50); //设置位置
edit2->setEchoMode(QLineEdit::Password); //设置回显模式
//设置登录按钮
btn1 = new QPushButton(QIcon(":/icon/denglu.png"),"登录",this);
btn1->move(200,550);
btn1->resize(100,50);
//设置退出按钮
btn2 = new QPushButton(QIcon(":/icon/quxiao.png"),"退出",this);
btn2->move(500,550);
btn2->resize(100,50);
this->connect(this->btn1,SIGNAL(clicked()),this,SLOT(log_in()));
this->connect(this->btn2,SIGNAL(clicked()),this,SLOT(log_out()));
}
Widget::~Widget() //析构函数的定义
{
delete ui; //释放类中的指针成员空间
}
void Widget::log_in()
{
if((edit1->text() == "admin") && (edit2->text() == "123456"))
{
qDebug()<<"登录成功";
log_out();
}
else
{
qDebug()<<"账号和密码不匹配";
edit2->clear();
}
}
void Widget::log_out()
{
this->close();
}
测试文件
#include "widget.h" //自定义的头文件
#include <QApplication> //引入应用程序的头文件
int main(int argc, char *argv[])
{
QApplication a(argc, argv); //实例化应用程序的对象
Widget w; //使用自定义的类实例化一个对象,在栈区
w.show(); //调用show函数,使界面显示出来
return a.exec(); //阻塞等待界面处理,等待信号与槽,等待用户操作界面,等待事件发生
}