qt : day 3

1.完成登录框的按钮操作,并在登录成功后进行界面跳转

------------------------------------------------------------------
.pro
------------------------------------------------------------------
QT       += core gui  texttospeech
greaterThan(QT_MAJOR_VERSION, 4): QT += widgets
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 += \
    failed.cpp \
    main.cpp \
    success.cpp \
    widget.cpp

HEADERS += \
    failed.h \
    success.h \
    widget.h
# Default rules for deployment.
qnx: target.path = /tmp/$${TARGET}/bin
else: unix:!android: target.path = /opt/$${TARGET}/bin
!isEmpty(target.path): INSTALLS += target
FORMS += \
    failed.ui \
    success.ui
------------------------------------------------------------------
widget.h
------------------------------------------------------------------
#ifndef WIDGET_H
#define WIDGET_H
#include <QWidget>
#include <QIcon>
#include <QLabel>
#include <QPushButton>
#include <QLineEdit>
#include <QTextToSpeech>
class Widget : public QWidget
{
    Q_OBJECT
public:
    Widget(QWidget *parent = nullptr);
    ~Widget();

private slots:
    void loginslot();
    void cancelslot();
signals:
    void failed_signal();
    void success_signal();
private:
    QPushButton *login_btn;
    QPushButton *cancel_btn;
    QLineEdit *account_edit;
    QLineEdit *pwd_edit;
    QLabel *main_lab;
    QLabel *account_lab;
    QLabel *pwd_lab;

    //创建一个播报员
    QTextToSpeech *speecher = new QTextToSpeech(this);
};
#endif // WIDGET_H
------------------------------------------------------------------
failed.h
------------------------------------------------------------------
#ifndef FAILED_H
#define FAILED_H
#include <QWidget>
#include <QIcon>
#include <QLabel>
namespace Ui {
class failed;
}
class failed : public QWidget
{
    Q_OBJECT
public slots:
    void fail_show();
public:
    explicit failed(QWidget *parent = nullptr);
    ~failed();
private:
    Ui::failed *ui;
};
#endif // FAILED_H
------------------------------------------------------------------
success.h
------------------------------------------------------------------
#ifndef SUCCESS_H
#define SUCCESS_H
#include <QWidget>
#include <QIcon>
#include <QLabel>
namespace Ui {
class success;
}
class success : public QWidget
{
    Q_OBJECT

public slots:
    void success_show();
public:
    explicit success(QWidget *parent = nullptr);
    ~success();
private:
    Ui::success *ui;
};
#endif // SUCCESS_H
------------------------------------------------------------------
main.cpp
------------------------------------------------------------------
#include "widget.h"
#include "failed.h"
#include "success.h"
#include <QApplication>
int main(int argc, char *argv[])
{
    QApplication a(argc, argv);
    Widget w;
    failed f;
    success s;
    QObject::connect(&w,&Widget::failed_signal,&f,&failed::fail_show);
    QObject::connect(&w,&Widget::success_signal,&s,&success::success_show);
    w.show();
    return a.exec();
}
------------------------------------------------------------------
widget.cpp
------------------------------------------------------------------
#include "widget.h"
Widget::Widget(QWidget *parent)
    : QWidget(parent)
{
    //---------------------------------窗口设置---------------------------------
    //设置窗口为固定大小
    this->setFixedSize(540,410);
    //设置窗口icon
    this->setWindowIcon(QIcon("D:/B.work/6qt/day1/icon/wodepeizhenshi.png"));
    //设置窗口名
    this->setWindowTitle("鹏哥快聊");
    //---------------------------------标签设置---------------------------------
    //=====创建界面标签=====
    main_lab = new QLabel(this);
    //修改标签大小
    main_lab->resize(540,200);
    //在标签中插入图片
    main_lab->setPixmap(QPixmap("D:/B.work/6qt/day1/icon/logo.png"));
    //设置为自适应
    main_lab->setScaledContents(1);
    //=====创建账号标签=====
    account_lab = new QLabel(this);
    //修改标签大小
    account_lab->resize(50,40);
    //在标签中插入图片
    account_lab->setPixmap(QPixmap("D:/B.work/6qt/day1/icon/userName.jpg"));
    //移动到合适位置
    account_lab->move(90,220);
    //设置为自适应
    account_lab->setScaledContents(1);
    //=====创建密码标签=====
    pwd_lab = new QLabel(this);
    //修改标签大小
    pwd_lab->resize(account_lab->size());
    //在标签中插入图片
    pwd_lab->setPixmap(QPixmap("D:/B.work/6qt/day1/icon/passwd.jpg"));
    //移动到合适位置
    pwd_lab->move(account_lab->x(),account_lab->y()+80);
    //设置为自适应
    pwd_lab->setScaledContents(1);
    //---------------------------------按钮设置---------------------------------
    //=====创建登录按钮=====
    login_btn = new QPushButton(this);
    //设置按钮大小
    login_btn->resize(100,40);
    //在按钮上插入图片
    login_btn->setIcon(QIcon("D:/B.work/6qt/day1/icon/login.png"));
    //在按钮上输入文本
    login_btn->setText("登录");
    //移动到合适位置
    login_btn->move(270,360);
    connect(login_btn,&QPushButton::clicked,this,&Widget::loginslot);
    //=====创建取消按钮=====
    cancel_btn = new QPushButton(this);
    //设置按钮大小
    cancel_btn->resize(100,40);
    //在按钮上插入图片
    cancel_btn->setIcon(QIcon("D:/B.work/6qt/day1/icon/cancel.png"));
    //在按钮上输入文本
    cancel_btn->setText("取消");
    //移动到合适位置
    cancel_btn->move(login_btn->x()+120,login_btn->y());
    connect(cancel_btn,&QPushButton::clicked,this,&Widget::cancelslot);
    //---------------------------------输入设置---------------------------------
    //=====创建账号输入=====
    account_edit = new QLineEdit(this);
    //设置占位文本
    account_edit->setPlaceholderText("QQ号码/手机/邮箱");
    //设置大小
    account_edit->resize(200,40);
    //移动到适合位置
    account_edit->move(account_lab->x()+100,account_lab->y());
    //=====创建密码输入=====
    pwd_edit = new QLineEdit(this);
    //设置占位文本
    pwd_edit->setPlaceholderText("密码");
    //设置大小
    pwd_edit->resize(account_edit->size());
    //移动到合适位置
    pwd_edit->move(pwd_lab->x()+100,pwd_lab->y());
    //设置回文显示模式
    pwd_edit->setEchoMode(QLineEdit::Password);
}
Widget::~Widget()
{
}
void Widget::loginslot()
{
    //登录成功
    if(account_edit->text()=="admin")
    {
        if(pwd_edit->text()=="123456")
        {
            emit success_signal();
            speecher->say("登录成功");
            this->close();
            return ;
        }
    }
    //登录失败
    emit failed_signal();
    speecher->say("登录失败");
    pwd_edit->clear();
}
void Widget::cancelslot()
{
    this->close();
}
------------------------------------------------------------------
fail.cpp
------------------------------------------------------------------
#include "failed.h"
#include "ui_failed.h"
failed::failed(QWidget *parent) :
    QWidget(parent),
    ui(new Ui::failed)
{
    ui->setupUi(this);
    this->resize(100,70);
    this->setWindowIcon(QIcon("D:/B.work/6qt/day1/icon/cancel.png"));
    QLabel *fail_lab = new QLabel(this);
    fail_lab->setText("登陆失败");
    fail_lab->resize(100,50);
    fail_lab->move(0,10);
}
failed::~failed()
{
    delete ui;
}
void failed::fail_show()
{
    this->show();
}
------------------------------------------------------------------
success.cpp
------------------------------------------------------------------
#include "success.h"
#include "ui_success.h"
success::success(QWidget *parent) :
    QWidget(parent),
    ui(new Ui::success)
{
    ui->setupUi(this);
    QLabel *success_lab = new QLabel("登录成功",this);
    this->setWindowIcon(QIcon("D:/B.work/6qt/day1/icon/login.png"));
    this->resize(100,70);
    success_lab->resize(100,50);
    success_lab->move(0,10);
}
success::~success()
{
    delete ui;
}
void success::success_show()
{
    this->show();
}

2.模拟面试答案

1).多态,虚函数,纯虚函数概念
多态:一个名字的多种用途
静态多态:函数的重载(同一作用域下,定义函数名相同参数列表不同的函数)/运算符的重载(给定大多数运算符特殊的意义作用于类对象,使得代码书写更加简洁)
在编译时已经实现对多态的实现
动态多态:需要借助继承和虚函数完成。
虚函数:父类与子类为继承关系,发生在父子类之间,由父类提供虚函数,子类对父类中的虚函数进行重写操作,父类指针指向子类对象,并调用子类中重写父类的虚函数
纯虚函数:对于某些类中的函数,在该类没有实现的意义与必要,称为抽象类,需要子类对该函数进行重写,就可以把该类定义为纯虚函数
2).将"引用"作为函数参数有哪些特点
函数参数作用:解决函数数据没有交集问题,实现函数直接数据的交流
函数参数传递方式:直接将数据传递给目标函数(不会改变函数外的值),地址传递(修改内存内的值,形参实参一起改变),都需要占用内存空间
引用作为函数参数传递方式:传递值本身(本质还是地址传递,不需要新的容器接收数据,效率高)
3).结构体与联合体的区别
相同点:都属于构造数据类型,由相同或不同数据类型所组成的构造数据类型
不同点:所占内存空间的计算方式不同
结构体:各个成员所占内存空间之和,且遵循字节对齐原则
联合体:所有成员共享同一块内存空间,大小以最大的成员为主,使用时,任何成员都可以访问这片空间,但是访问大小不一样

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值