QTday2

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

widget.cpp代码

#include "widget.h"
#include "ui_widget.h"

Widget::Widget(QWidget *parent)
    : QWidget(parent)
    , ui(new Ui::Widget)
{
    ui->setupUi(this);
    //this->my_slot();
    this->setWindowTitle("聊天室");  //设置窗口的标题
    this->setWindowIcon(QIcon(":/new/prefix1/icon/wodepeizhenshi.png"));  //设置窗口的icon
    this->setFixedSize(640,480);    //固定窗口大小

    lab1=new QLabel(this);
    lab1->resize(40,40);          //设置标签大小
    lab1->move(160,280);          //调整标签位置
    lab1->setPixmap(QPixmap(":/new/prefix1/icon/userName.jpg"));   //设置标签图标
    lab1->setScaledContents(true);     //设置图片自适应

    lab2=new QLabel(this);
    lab2->resize(lab1->size());
    lab2->move(lab1->x(),lab1->y()+50);
    lab2->setPixmap(QPixmap(":/new/prefix1/icon/passwd.jpg"));
    lab2->setScaledContents(true);

    lab3=new QLabel(this);
    lab3->resize(640,240);
    lab3->move(0,0);
    lab3->setPixmap(QPixmap(":/new/prefix1/icon/logo.png"));
    lab3->setScaledContents(true);

    edit1= new QLineEdit(this);
    edit1->setPlaceholderText("QQ/手机/邮箱");    //设置编辑器的占位文本
    edit1->resize(300,40);           //设置尺寸
    edit1->move(lab1->x()+80,lab1->y());   //移动位置

    edit2= new QLineEdit(this);
    edit2->setPlaceholderText("密码");    //设置编辑器的占位文本
    edit2->resize(edit1->size());           //设置尺寸
    edit2->move(lab2->x()+80,lab2->y());   //移动位置
    edit2->setEchoMode(QLineEdit::Password);   //设置回显模式

    btn1=new QPushButton(this);
    btn1->setText("登录");            //给按钮设置文本内容
    btn1->resize(100,40);            //给按钮重新设置大小
    btn1->move(400,400);             //调整按钮位置
    btn1->setIcon(QIcon(":/new/prefix1/icon/login.png"));


    btn2=new QPushButton(this);
    btn2->setText("取消");
    btn2->resize(btn1->size());
    btn2->move(btn1->x()+120,btn1->y());
    btn2->setIcon(QIcon(":/new/prefix1/icon/cancel.png"));

    //使用qt5版本的连接,将登录按钮发射的clicked信号,与当前界面的自定义的槽函数连接
    connect(this->btn1,&QPushButton::clicked,this,&Widget::my_slot);
    connect(this->btn2,SIGNAL(pressed()),this,SLOT(close()));



}

Widget::~Widget()
{
    delete ui;
}
void Widget:: my_slot()
{
    if(edit1->text()=="admin" && edit2->text()=="123456")
    {
        qDebug()<<"匹配成功";
        emit jump();
        this->close();
    }
    else
    {
        qDebug()<<"登录失败";
        edit2->clear();
    }
}

main.cpp代码

#include "widget.h"
#include "form.h"
#include 

int main(int argc, char *argv[])
{
    QApplication a(argc, argv);
    Widget w;
    w.show();
    Form f;

    //将第一个界面的信号函数与第二个界面的槽函数连接
    QObject::connect(&w,&Widget::jump,&f,&Form::jump_slot);


    return a.exec();
}

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::jump_slot()
{
    this->show();
}

2.模拟面试题

(1)多态,虚函数,纯虚函数

多态:多态是指在面向对象编程中,同一个方法可以根据不同的对象产生不同的行为。简单来说,多态是一种将父类对象指针指向子类对象的特性。是子类可以通过重写父类的方式来改变方法的行为

虚函数:虚函数是在基类中声明为虚函数的函数。虚函数可以在派生类中被重写,并且在运行时根据对象的实际类型调用相应的函数。使用虚函数可以实现多态性。

纯虚函数:纯虚函数是在基类中定义的没有实际实现的函数,只有函数的声明,没有函数体。纯虚函数通过在函数声明后加上 "= 0" 来标识。纯虚函数可以用来定义抽象类,抽象类是不能被实例化的类,只能作为基类来派生出具体的实现类。抽象类中的纯虚函数必须在派生类中被实现,否则派生类也会成为抽象类。

(2)将"引用"作为函数参数有何特点

1.传递的是变量的引用而不是值:使用引用作为函数参数,可以直接操作原始变量,而不是创建一个新的副本。这样可以避免在函数内部对变量进行复制,提高了程序的效率。

2.可以修改原始变量的值:通过引用传递参数,函数可以修改原始变量的值。这是因为函数操作的是原始变量的内存地址,而不是副本。

3.函数参数与原始变量是同一个对象:通过引用传递参数,函数内部的操作会直接影响到原始变量。任何对参数的修改都会反映在原始变量上

(3)结构体和联合体的区别

共同点:都可以用来存储类型相同或不同的构造类型

不同点:结构体中的成员在内存中分开存储,遵循字节对齐原则存储在内存空间中,结构体中的成员可以独立访问;联合体中的成员共享同一片内存空间,内存大小为联合体内最大成员的大小,一次只能访问一个成员.

3.思维导图

QTday2_第1张图片

你可能感兴趣的:(qt,c++)