QT注册界面练习(信号与槽实现页面跳转)

一、注册界面练习思路以及具体代码

        在完成注册页面搭建的前提下,通过信号与槽机制实现多组件之间的相互通信,实现页面跳转。

基本步骤:

        首先,将注册页面的登录按钮与成功登陆信号绑定,当用户名与密码均匹配时,关闭注册页面,发送跳转信号。

        其次,在成功登陆页面中设置槽函数,展示成功登陆界面。

        最后,将跳转信号与成功登陆页面槽函数进行绑定,当触发跳转信号后,调用相应槽函数。具体代码如下:

注册页面头文件

#ifndef WIDGET_H
#define WIDGET_H#include <QWidget>
#include <QIcon>
#include <QLabel>
#include <QLineEdit>
#include <QPushButton>
#include <QDebug>QT_BEGIN_NAMESPACE
namespace Ui { class Widget; }
QT_END_NAMESPACEclass Widget : public QWidget
{Q_OBJECTsignals:void login_success();public slots:void my_slot();public:Widget(QWidget *parent = nullptr);~Widget();private:Ui::Widget *ui;QLabel *lab_logo;QLabel *lab_name;QLabel *lab_passwd;QLineEdit *edit_name;QLineEdit *edit_passwd;QPushButton *btn_login;QPushButton *btn_cancel;QPushButton *btn3;
};
#endif // WIDGET_H

 注册页面核心代码

#include "widget.h"
#include "ui_widget.h"Widget::Widget(QWidget *parent): QWidget(parent), ui(new Ui::Widget)
{ui->setupUi(this);//设置固定窗口尺寸this->setFixedSize(540,410);//设置窗口标题this->setWindowTitle("My_QQ");//设置窗口图标this->setWindowIcon(QIcon(":/icon/wodepeizhenshi.png"));//设置logolab_logo = new QLabel("LOGO",this);lab_logo->resize(540,205);lab_logo->setPixmap(QPixmap(":/icon/logo.png"));lab_logo->setScaledContents(true);lab_name = new QLabel("账号",this);lab_name->resize(35,35);lab_name->move(115,230);lab_name->setPixmap(QPixmap(":/icon/userName.jpg"));lab_name->setScaledContents(true);lab_passwd = new QLabel("密码",this);lab_passwd->resize(35,35);lab_passwd->move(lab_name->x(),lab_name->y()+65);lab_passwd->setPixmap(QPixmap(":/icon/passwd.jpg"));lab_passwd->setScaledContents(true);//2、构造行编辑器,构造时给定父组件edit_name = new QLineEdit(this);edit_name->setPlaceholderText("QQ/手机/邮箱");           //设置编辑器的占位文本edit_name->resize(230,40);                              //设置尺寸edit_name->move(lab_name->x()+80,lab_name->y());                //移动位置//edit1->setStyleSheet("broder-color:black");         //设置样式表//3、构造行编辑器,构造时给定父组件以及文本内容edit_passwd = new QLineEdit(this);edit_passwd->setPlaceholderText("密码");                   //设置编辑器的占位文本edit_passwd->resize(230,40);                              //设置尺寸edit_passwd->move(lab_passwd->x()+80,lab_passwd->y());                //移动位置edit_passwd->resize(edit_name->size());edit_passwd->move(edit_name->x(),edit_name->y()+60);edit_passwd->setEchoMode(QLineEdit::Password);             //设置回显模式//4、使用无参构造添加一个按钮btn_login = new QPushButton;   //无参构造btn_login->setParent(this);         //给组件指定父组件,让其依附于界面而存在btn_login->setText("登录");         //给组件设置文本内容btn_login->resize(QSize(90,35));   //设置按钮组件的大小btn_login->move(195,360);          //移动组件位置btn_login->setIcon(QIcon(":/icon/login.png"));//5、构造按钮时,指定父组件btn_cancel = new QPushButton(this);      //将当前界面设置成父组件btn_cancel->setText("取消");btn_cancel->resize(btn_login->size());                     //使用其他按钮的大小设置该组件的大小btn_cancel->move(btn_login->x()+140,btn_login->y());btn_cancel->setIcon(QIcon(":/icon/cancel.png"));    //设置图标connect(btn_login,&QPushButton::clicked,this,&Widget::my_slot);connect(btn_login,SIGNAL(clicked()),this,SLOT(close()));
}Widget::~Widget()
{delete ui;
}void Widget::my_slot()
{if(edit_name->text()=="admin" &&edit_passwd->text()=="123456"){qDebug() << "登陆成功";this->close();emit login_success();}else{qDebug() << "登录失败";this->edit_passwd->clear();}
}

 成功登陆页面头文件

#ifndef FORM_H
#define FORM_H#include <QWidget>
#include <QLabel>namespace Ui {
class Form;
}class Form : public QWidget
{Q_OBJECTpublic slots:void login_success();public:explicit Form(QWidget *parent = nullptr);~Form();private:Ui::Form *ui;QLabel *lab_title;
};#endif // FORM_H

成功登陆页面核心代码

#include "form.h"
#include "ui_form.h"Form::Form(QWidget *parent) :QWidget(parent),ui(new Ui::Form)
{ui->setupUi(this);lab_title = new QLabel(this);this->lab_title->setText("登陆成功");
}Form::~Form()
{delete ui;
}void Form::login_success()
{this->show();
}

主函数

#include "widget.h"
#include "form.h"
#include <QApplication>int main(int argc, char *argv[])
{QApplication a(argc, argv);Widget w;w.show();Form f;w.connect(&w,&Widget::login_success,&f,&Form::login_success);return a.exec();
}

项目管理文件

QT       += core guigreaterThan(QT_MAJOR_VERSION, 4): QT += widgetsCONFIG += 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.0SOURCES += \form.cpp \main.cpp \widget.cppHEADERS += \form.h \widget.hFORMS += \form.ui \widget.ui# Default rules for deployment.
qnx: target.path = /tmp/$${TARGET}/bin
else: unix:!android: target.path = /opt/$${TARGET}/bin
!isEmpty(target.path): INSTALLS += targetRESOURCES += \icon.qrc

 二、面试题简述

1、多态、虚函数、纯虚函数?

答:多态分为静态多态动态多态,静态多态有函数重载、运算符重载,函数重载表示在同一作用域下,相同函数名,不同参数列表实现不同的功能,运算符重载表示为对运算符的重新构建从而实现更多复杂的功能。动态多态表示为父类的指针或引用,指向或初始化子类的对象,调用子类对父类重写的函数,进而展开子类的功能。

        首先动态多态的运行存在许多前提条件,第一点是必须有继承关系,因为动态多态发生在父子类之间。第二点是子类和父类有他们同名同类型的函数,只有子类中有与父类同名同类型的函数时才能实现对函数的重写,第三点是父类被重写的函数必须为虚函数。

        虚函数,用virtual修饰的函数即为虚函数,当类中存在虚函数,那么该类中就会有一个虚指针,虚指针指向虚函数表,虚函数表中记录了所有虚函数以及子类对父类重写的函数。

        当父类中的虚函数没有实际意义时,可将该虚函数设置为纯虚函数,含有纯虚函数的类被称为抽象类,抽象类不能实例化对象,当子类没有对父类的纯虚函数进行重新时,子类也被称为抽象类。

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

答:函数参数是程序间数据交互的桥梁,一般分为值传递和地址传递。值传递,传递的是值,不改变值原本的大小。地址传递,传递的是地址,当通过地址访问到其地址所指向的内容时,其内容可以发生改变。引用的实质为取别名,一旦确定指向不能更改。使用引用作为函数参数时,不需要重新开辟空间,效率高,通过引用可直接改变其对应的内容。当引用不想被改变的变量时,可使用const修饰,此时为常引用,常引用不能修改值的大小。

3、结构体和联合体有何区别?

答:结构体与联合体都是构造数据类型,都是由相同或不同的数据类型构造而成。但是结构体每个成员地址连续,结构体大小由每个成员的字节大小字节对齐原则决定。而联合体大小由其成员中字节最大的决定,所有成员共用一片空间。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/61346.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

如何做一个H5弹窗组件复用?

关闭按钮在内部时 <template><div class"tipPop"><div class"tipPop-show"><div><img class"close" src"/assets/img/close.png" click.stop"handleClsoeData"/><slot></slot>&…

JDK的组成、作用

JDK&#xff1a;java development kit java的标准开发工具包 jre&#xff1a;java runtime environment 运行基于java语言编写的程序必不可少的运行环境用于解释和执行java的字节码文件&#xff08;.class文件&#xff09;普通用户&#xff08;无开发需求&#xff09;下载jre…

IDEA集成Git相关操作知识(pull、push、clone)

一&#xff1a;集成git 1&#xff1a;初始化git&#xff08;新版本默认初始化&#xff09; 老版本若没有&#xff0c;点击VCS&#xff0c;选中import into Version Controller中的Create git Repository(创建git仓库)&#xff0c;同理即可出现git符号。 也可查看源文件夹有没有…

Linux脚本-将当前文件夹下所有包含main函数的.c文件提取出来

实现一个Linux脚本&#xff0c;该脚本使用 for 循环遍历当前目录下的所有 .c 文件。 对于每个 .c 文件&#xff0c;使用 grep 命令来查找是否包含字符串 “main”。 如果该 .c 文件包含 “main”&#xff0c;则输出到/home/majn/llvm_project/extract_main目录下。 #!/bin/bas…

01_lwip_raw_udp_test

1.打开UDP的调试功能 &#xff08;1&#xff09;设置宏定义 &#xff08;2&#xff09;打开UDP的调试功能 &#xff08;3&#xff09;修改内容&#xff0c;串口助手打印的日志信息自动换行 2.电脑端连接 UDP发送一帧数据 3.电路板上发送一帧数据

Qt自定义标题栏

一、创建项目 最终项目文件结构如下 “iconfont.tff”的使用方式见如下博客&#xff0c;用于更改图标颜色Qt更改图标颜色_怎么追摩羯座的博客-CSDN博客 二、MyTitleBar.pro #------------------------------------------------- # # Project created by QtCreator 2023-08-2…

如何为你的公司选择正确的AIGC解决方案?

如何为你的公司选择正确的AIGC解决方案&#xff1f; 摘要引言词汇解释&#xff08;详细版本&#xff09;详细介绍1. 确定需求2. 考虑技术能力3. 评估可行性4. 比较不同供应商 代码快及其注释注意事项知识总结 博主 默语带您 Go to New World. ✍ 个人主页—— 默语 的博客&…

Linux centos7 bash编程(break和continue)

在学习shell知识时&#xff0c;简单编程要从格式入手。 首先学习好单行注释和多行注释。 先学习简单整数的打印输出&#xff0c;主要学习echo命令&#xff0c;学习选项-e -n的使用。 下面的练习是常用的两个分支跳转程序&#xff1a;break和continue。 #!/bin/bash # 这是单…

贪心算法总结篇

文章转自代码随想录 贪心算法总结篇 我刚刚开始讲解贪心系列的时候就说了&#xff0c;贪心系列并不打算严格的从简单到困难这么个顺序来讲解。 因为贪心的简单题可能往往过于简单甚至感觉不到贪心&#xff0c;如果我连续几天讲解简单的贪心&#xff0c;估计录友们一定会不耐…

matlab使用教程(29)—微分方程实例

此示例说明如何使用 MATLAB 构造几种不同类型的微分方程并求解。MATLAB 提供了多种数值算法来求解各种微分方程&#xff1a; 1.初始值问题 vanderpoldemo 是用于定义 van der Pol 方程的函数 type vanderpoldemo function dydt vanderpoldemo(t,y,Mu) %VANDERPOLDEMO Defin…

如何在不重新安装的情况下将操作系统迁移到新硬盘?

通常情况下&#xff0c;当你的硬盘损坏或文件过多时&#xff0c;电脑会变得缓慢且卡顿。这时&#xff0c;你可能会被建议更换为一块更好的新硬盘。 ​ 在比较HDD和SSD之后&#xff0c;许多用户更愿意选择SSD作为他们的新硬盘&#xff0c;因为SSD比HDD更稳定且运行更安…

双核和双路服务器的区别

服务器术语里&#xff0c;大家经常会听到1U、2U&#xff0c;单路、双路&#xff0c;机架式、塔式及刀片式等常用名词。其中&#xff0c;机架式、塔式及刀片式是 指服务器的外形&#xff0c;U是指服务器的高度&#xff0c;路是指服务器的处理器数量。 部分朋友会问&#xff0c;我…

Android 设置app深色、浅色、跟随系统

Android深色模式适配 我们需要再用户设置时候&#xff0c;记录下来&#xff0c;用户的设置&#xff0c;等app再次启动时候&#xff0c;获取之前设置&#xff0c;重新设置 public static void setThemeMode() {int themeModeType SpUtils.getThemeModeType();if (themeModeTyp…

环境安装:rpm安装jdk上线项目

Tomcat安装 解析域名 购买域名并配置 安装Docker yum 卸载以前装过的docker

Seaborn数据可视化(四)

目录 1.绘制箱线图 2.绘制小提琴图 3.绘制多面板图 4.绘制等高线图 5.绘制热力图 1.绘制箱线图 import seaborn as sns import matplotlib.pyplot as plt # 加载示例数据&#xff08;例如&#xff0c;使用seaborn自带的数据集&#xff09; tips sns.load_dataset("t…

算法通关村第十七关——柠檬水找零

贪心&#xff0c;顾名思义&#xff0c;就是挑价值最大的 如果直接挑价值最大的&#xff0c;这样不一定能够达到最优解&#xff0c;因为最终价值多少还要取决于背包容量。 贪心算法解决0-1背包问题的基本思路是&#xff1a;按照物品的单位价值&#xff08;即价值与重量的比值&…

上海市青少年算法2023年7月月赛(丙组)

T1先行后列 题目描述 从 1 开始的 nm 个整数按照先行后列的规律排列如下: 给定 n 与 m,再给定一个数字 c,请输出 c 所在的行数与列数。 输入格式 第一行:两个整数表示 n 与 m 第二行:一个整数表示 c 输出格式 两个整数:表示 c 所在的行数与列数。 数据范围 1≤n,m≤10000…

[SpringBoot3]远程访问@HttpExchange

六、远程访问HttpExchange[SpringBoot3] 远程访问是开发的常用技术&#xff0c;一个应用能够访问其他应用的功能。SpringBoot提供了多种远程访问的技术。基于HTTP协议的远程访问是最广泛的。SpringBoot中定义接口提供HTTP服务。生成的代理对象实现此接口&#xff0c;代理对象实…

MIMIC-IV数据提取教程

一、获取MIMIC-IV数据库 MIMIC-IV数据库需要申请权限&#xff0c;具体怎么申请我之前的博客发的有:MIMIC数据库申请流程 以最新的MIMIC-IV 2.2版本为例&#xff0c;首先打开页面拖动到最底端&#xff1a;https://physionet.org/content/mimiciv/2.2/ 直接下载解压下来&#x…

linux下安装Mycat

1 官网下载mycat 官方网站&#xff1a; 上海云业网络科技有限公司http://www.mycat.org.cn/ github地址&#xff1a; MyCATApache GitHubMyCATApache has 34 repositories available. Follow their code on GitHub.https://github.com/MyCATApache 2 Mycat安装 1 把MyCat…