QTday2

作业

主页登录成功跳转

头文件

hqyj.h

#ifndef HQYJ_H
#define HQYJ_H

#include <QWidget>
#include <QLineEdit>
#include <QLabel>
#include <QPushButton>
#include <QDebug>
#include <QIcon>
#include <QObject>
#include <QString>

class HQYJ : public QWidget
{
    Q_OBJECT

public:
    HQYJ(QWidget *parent = nullptr);
    ~HQYJ();
    QLabel *lab1;
    QLabel *lab2;
    QLabel *lab3;
    QLineEdit *edit1;
    QLineEdit *edit2;
    QPushButton *bnt1;
    QPushButton *bnt2;
signals:
    void my_signal();//自定义跳转信号
public slots:
    void my_slot();//自定义登录槽函数
};
#endif // HQYJ_H

form.h

#ifndef FORM_H
#define FORM_H

#include <QWidget>
#include <QObject>
#include <QString>

namespace Ui {
class Form;
}

class Form : public QWidget
{
    Q_OBJECT

public:
    explicit Form(QWidget *parent = nullptr);
    ~Form();

private:
    Ui::Form *ui;
public slots:
    void my_slot();//自定义接受跳转槽函数
};

#endif // FORM_H

源文件

hqyj.cpp

#include "hqyj.h"

HQYJ::HQYJ(QWidget *parent)
    : QWidget(parent)
{
    //主界面设置
    this->resize(540,410);
    this->setFixedSize(540,410);
    this->setWindowIcon(QIcon(":/icon/wodepeizhenshi.png"));
    this->setWindowTitle("阿瑞乱聊");
    //主页标签,设置大小、位置、图片、自适应
    this->lab1 = new QLabel(this);//账号
    this->lab2 = new QLabel(this);//密码
    this->lab3 = new QLabel(this);//大图
    this->lab1->resize(50,50);
    this->lab1->move(100,200);
    this->lab1->setPixmap(QPixmap(":/icon/userName.jpg"));
    this->lab1->setScaledContents(true);
    this->lab2->resize(this->lab1->size());
    this->lab2->move(this->lab1->x(),this->lab1->y()+70);
    this->lab2->setPixmap(QPixmap(":/icon/passwd.jpg"));
    this->lab2->setScaledContents(true);
    this->lab3->resize(520,190);
    this->lab3->move(10,0);
    this->lab3->setPixmap(QPixmap(":/icon/logo.png"));
    this->lab3->setScaledContents(true);
    //主页行编辑器,设置默认占位字符、大小、位置、密码输入的回显
    this->edit1 = new QLineEdit(this);
    this->edit2 = new QLineEdit(this);
    this->edit1->setPlaceholderText("QQ号/手机/邮箱");
    this->edit2->setPlaceholderText("密码");
    this->edit1->resize(300,50);
    this->edit2->resize(this->edit1->size());
    this->edit1->move(this->lab1->x()+60,this->lab1->y());
    this->edit2->move(this->lab2->x()+60,this->lab2->y());
    this->edit2->setEchoMode(QLineEdit::Password);//设置回显模式
    //主页按键,设置大小、位置
    this->bnt1 = new QPushButton(QIcon(":/icon/login.png"),"登录",this);
    this->bnt2 = new QPushButton(QIcon(":/icon/cancel.png"),"取消",this);
    this->bnt1->resize(70,50);
    this->bnt2->resize(this->bnt1->size());
    this->bnt1->move(this->edit2->x()+40,this->edit2->y()+70);
    this->bnt2->move(this->bnt1->x()+90,this->bnt1->y());
    //按钮链接
    connect(this->bnt2,SIGNAL(clicked()),this,SLOT(close()));//接受关闭信号,并执行关闭
    connect(this->bnt1,&QPushButton::clicked,this,&HQYJ::my_slot);//接受登陆信号,并判断
}

HQYJ::~HQYJ()
{
}
void HQYJ::my_slot()//自定义登录槽函数
{
    QString userName = this->edit1->text();//接收账号行编辑器内字符
    QString pwd = this->edit2->text();//接受密码行编辑器内字符
    if(userName=="admin" && pwd=="123456")//判断是否正确
    {//正确,显示成功和跳转
        qDebug() << "登录成功";
        emit(HQYJ::my_signal());
        this->close();
    }else
    {//错误,显示失败并清空密码行编辑器内容
        qDebug() << "登陆失败";
        this->edit2->clear();
    }
}

form.cpp

#include "form.h"
#include "ui_form.h"

Form::Form(QWidget *parent) :
    QWidget(parent),
    ui(new Ui::Form)
{
    ui->setupUi(this);
}

Form::~Form()
{
    delete ui;
}
void Form::my_slot()//接收跳转信号
{
    this->show();//展示新的界面
}

main.cpp

#include "hqyj.h"
#include "form.h"

#include <QApplication>

int main(int argc, char *argv[])
{
    QApplication a(argc, argv);
    HQYJ w;//实例化登录界面
    w.show();//展示登陆界面
    Form F;//实例化登录成功后的界面
    QObject::connect(&w,&HQYJ::my_signal,&F,&Form::my_slot);//将两个界面用信号和槽进行连接

    return a.exec();
}

今日面试问题

多态,虚函数,纯虚函数

答:多态是指父类的指针或者引用,指向或者初始化子类对象时,子类中的成员函数对父类中同名的成员函数进行重载,它可以使父类的一个函数在不同子类中有不同的作用。虚函数和虚指针是完成多态的重要成员,父类中的虚函数在子类中被调用时会被子类中同名的函数进行重载,父类中的虚函数不被调用时,他也有自己的功能,虚指针是和虚函数一起的,虚指针会指向一个函数指针数组,函数指针数组里面有父类中的一切虚函数,在子类调用虚函数时,虚指针会先在函数指针数组里找到需要的虚函数,然后将子类的同名函数替换进去,这样就实现了多态。纯虚函数是指在父类中没有实际意义的虚函数,它仅仅是为了子类中的函数对父类中的同名函数进行重载所设立的,类如果有纯虚函数那么它就是一个抽象类,如果有子类继承这个抽象类,并且不去重载这个虚函数,这个子类也是一个抽象类,抽象类是指至少有一个纯虚函数的类。

将”引用“作为函数参数有哪些特点

答:函数参数的作用是为了建立两个互不干扰的程序之间的联系,它主要分为两大类联系方式,一种是传值的方式,一种是传址的方式。首先,传值的方式建立联系,它就仅仅是将一个程序内的变量的值传递给另一个程序,并且它需要在另一个程序内定义一个同类型变量去接,两个程序内这一个变量在两个不同的内存空间存放,修改其中一个不会影响另一个。传址的方式建立联系,它是将一个程序内该变量的内存地址位置传递给另一个程序,它会使两个程序中该变量是同一个,值相同,内存地址也相同,改变其中一个另一个也会相应改变。引用是一个变量用另一个变量名去表示,就像是取别名,该变量有两个变量名并且这两个都是代表这个变量,无论通过这其中哪个变量名去改变变量值,另一个都会发生相同的变化。将”引”用作为函数参数传递与传址相似,但是它是将这个变量本身传递到另一个程序中,所以它不用重新开辟空间或者初始化,这决定了它的运行效率比传值和传址都高。

结构体与联合体的区别

答:这两个都是构造体,两个都是可以存同类型或不同类型的多个变量,但是结构体的大小是结构体中所以变量大小之和并且大小遵循字节对齐,每个变量都有自己的空间,联合体的大小是联合体中最大字节的变量大小,每个变量共用同一片空间,一次只能使用共用体中的一个变量。

思维导图

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值