1.优化登陆界面,当点击登录按钮后,在该按钮对应的槽函数中,判断账户和密码框内的数据是否为admin和123456,如果账户密码匹配成功,则提示登陆成功并关闭登录界面,如果账户密码匹配失败,则提示登录失败,并将密码框中的内容清空。
当点击取消按钮后,则关闭整个登陆界面
要求:对登录按钮使用QT5版本的链接,对取消按钮,使用QT4版本的链接
完成登陆框的按钮操作,并在登陆成功后,进行页面跳转
widget.h
#ifndef WIDGET_H
#define WIDGET_H
#include
#include
#include
#include
#include
#include
#include
QT_BEGIN_NAMESPACE
namespace Ui { class Widget; }
QT_END_NAMESPACE
class Widget : public QWidget
{
Q_OBJECT
signals:
void my_signal(); //自定义信号函数
public slots:
void my_slot(); //自定义的登录槽函数
void on_btn1_clicked();
void on_btn3_clicked();
signals:
void jump(); //自定义跳转函数
public:
Widget(QWidget *parent = nullptr);
~Widget();
private:
Ui::Widget *ui;
QLabel *lab1;
QLabel *lab2;
QLineEdit *edit2;
QPushButton *btn1;
QPushButton *btn2;
QPushButton *btn3;
QLabel *lab3;
QLineEdit *edit1;
};
#endif // WIDGET_H
second.h
#ifndef SECOND_H
#define SECOND_H
#include
namespace Ui {
class Second;
}
class Second : public QWidget
{
Q_OBJECT
public:
explicit Second(QWidget *parent = nullptr);
~Second();
public slots:
void jump_slot(); //定义有关处理跳转信号的槽函数
private:
Ui::Second *ui;
};
#endif // SECOND_H
main.cpp
#include "widget.h"
#include "second.h"
#include
int main(int argc, char *argv[])
{
QApplication a(argc, argv);
Widget w;
Second s;
w.show();
//链接信号与槽完成两个页面的跳转
QObject::connect(&w,&Widget::jump,&s,&Second::jump_slot);
return a.exec();
}
widget.cpp
#include "widget.h"
#include "ui_widget.h"
Widget::Widget(QWidget *parent)
: QWidget(parent)
, ui(new Ui::Widget)
{
ui->setupUi(this);
//更改窗口标题
this->setWindowTitle("MyQQ");
//更改窗口图标
this->setWindowIcon(QIcon(":/new/prefix1/icon/qie.png"));
//更改logo图,在当前路径下
this->setFixedSize(700,800);
//1.实例化一个标签,设置上面界面
lab1 = new QLabel(this);//设置父组件
lab1 -> resize(700,300);//设置大小
lab1->setPixmap(QPixmap(":/new/prefix1/icon/wangzhe.jpg"));//设置内容为图片
lab1->setScaledContents(true);//设置内容自适应
//2.实例化一个标签,设置账号
lab2 = new QLabel(this);//设置父组件
lab2 -> move(150,400);//设置位置
lab2->setPixmap(QPixmap(":/new/prefix1/icon/denglu.png"));//设置内容为图片
//3.实例化一个标签,设置密码
lab3 = new QLabel(this);//设置父组件
lab3 -> move(150,lab2->y()+50);//设置位置
lab3->setPixmap(QPixmap(":/new/prefix1/icon/mima.png"));//设置内容为图片
//1.构造一个行编辑器,构造时给定父组件
edit1 = new QLineEdit(this);
edit1->setPlaceholderText("QQ/手机/邮箱"); //设置编辑器的占位文本
edit1->resize(300,40); //设置尺寸
edit1->move(lab1->x()+250,400);//移动位置
//edit1->setEnabled(false); //设置不可用状态
//2.构造一个行编辑器,构造时给定父组件以及文本内容
edit2 = new QLineEdit("",this);
edit2->setPlaceholderText("密码"); //设置编辑器的占位文本
qDebug() << edit2->text(); //获取行文本编辑器中文本内容
edit2->resize(edit1->size());
edit2->move(lab1->x()+250,edit1->y()+50);
edit2->setEchoMode(QLineEdit::Password); //设置回显模式
//1.构造一个按钮时,指定父组件,登录
btn1 = new QPushButton(this); //将当前界面设置成父组件
btn1->setText("微信登录");
btn1->resize(btn1->size());
btn1->move(edit2->x(),edit2->x()+300);
btn1->setIcon(QIcon(":/new/prefix1/icon/w.png"));
//2.构造一个按钮时,指定父组件,登录
btn2 = new QPushButton(this); //将当前界面设置成父组件
btn2->setText("qq登录");
btn2->resize(btn1->size());
btn2->move(btn1->x()+100,edit2->x()+300);
btn2->setIcon(QIcon(":/new/prefix1/icon/qie.png"));
//2.构造一个按钮时,指定父组件,取消登录
btn3 = new QPushButton(this); //将当前界面设置成父组件
btn3->setText("取消登录");
btn3->resize(btn1->size());
btn3->move(btn1->x()+200,edit2->x()+300);
btn3->setIcon(QIcon(":/new/prefix1/icon/cuowu.png"));
//QT5链接微信登录到自定义的槽函数中
connect(this->btn1,&QPushButton::clicked,this,&Widget::my_slot);
//QT4链接取消到自定义的槽函数中
connect(btn3,SIGNAL(pressed()),this,SLOT(close()));
}
Widget::~Widget()
{
delete ui;
}
void Widget::my_slot()
{
//获取文本内容
QString username = edit1->text();
QString pwd = edit2->text();
if(username == "admin" && pwd == "123456")
{
qDebug()<< "登陆成功";
emit jump();
this->close();
}
else
{
qDebug()<< "登陆失败";
edit2->clear();
}
}
void Widget::on_btn1_clicked()
{
}
void Widget::on_btn3_clicked()
{
}
second.cpp
#include "second.h"
#include "ui_second.h"
Second::Second(QWidget *parent) :
QWidget(parent),
ui(new Ui::Second)
{
ui->setupUi(this);
}
Second::~Second()
{
delete ui;
}
//处理跳转信号函数对应的槽函数
void Second::jump_slot()
{
this->show(); //将当前界面进行展示
}
面试题:
一.多态,虚函数,纯虚函数
多态是类的三大属性之一,分为静态多态和动态多态,静态多态是函数重载,动态多态又称动态绑定,在运行时去确定对象的类型和正确选择需要调用的函数,一般用于解决基类指针或引用派生类对象调用类中的重写的函数时出现的问题。多态意为一种形式多种状态,是父类指针或者引用,指向或初始化子类的对象,调用子类对父类重写的函数,进而展开子类的功能。
虚函数是函数前加上virtual,虚函数满足继承,父类中该函数时虚函数,继承到子类中,依然是虚函数,如果子类再被继承,“孙类还是虚函数”。
当类中有虚函数或者继承了虚函数时,类中自动添加一个虚指针,虚指针指向一个虚函数列表,列表中寻访指向虚函数的指针,实际上是一个函数指针数组。虚指针是一个指向函数指针数组的指针。
纯虚函数是当父类中虚函数被子类用来重写,但没有真正意义的时候,把父类中的虚函数写成纯虚函数,有纯虚函数的类是一个抽象类,只能被继承,无法实例化一个具体的对象。每个抽象类中至少有一个纯虚函数。当子类继承了父类的两个纯虚函数但只重写了一个纯虚函数是,就还是一个抽象类,无法实例化一个对象。
二.引用作为函数参数有哪些特点:
1.引用必须在函数定义时声明,且不能为NULL,必须引用一块已经存在的内存空间。
2通过引用传参可以避免复制大量数据,提高程序的执行效率。
3.通过引用传递参数,可以在函数内部对实参进行修改,从而改变原始值,不用返回值。
4.引用参数可以让函数接收不同类型的参数。
5.引用和目标占用同一块空间,在作为参数传递时,不会开辟新的空间,没有值传递和地址传递的区别