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.思维导图