qt 信号与槽机制,登录界面跳转

登录界面跳转

配置文件 .pro

QT       += core gui texttospeechgreaterThan(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

头文件.head

#ifndef FORM_H
#define FORM_H#include <QWidget>    //父类所在的头文件
#include <QLabel>    //标签类所在的头文件namespace Ui {
class Form;
}class Form : public QWidget         //封装一个类,公共继承与QWidget
{Q_OBJECT           //信号和槽的元对象public:explicit Form(QWidget *parent = nullptr);          //构造函数的声明, 默认参数nullptr~Form();               //析构函数的声明private:Ui::Form *ui;          //通过ui指针可以找到通过图形化界面拖拽的组件,ui->组件名//定义一个标签指针QLabel *lab1;
};#endif // FORM_H
#ifndef WIDGET_H
#define WIDGET_H#include <QWidget>
#include <QLabel>
#include <QIcon>
#include <QLineEdit>
#include <QPushButton>
#include <QTextToSpeech>
#include <QtDebug>>QT_BEGIN_NAMESPACE
namespace Ui { class Widget; }
QT_END_NAMESPACEclass Widget : public QWidget
{Q_OBJECTpublic:Widget(QWidget *parent = nullptr);~Widget();signals:void my_signal(); //定义一个信号函数void jump();   //声明一个跳转的信号函数
public slots:void  my_login_slot();        //声明一个处理登录按钮发射的信号的槽函数void  my_cancle_slot();      //声明一个处理取消按钮发射的信号的槽函数private:Ui::Widget *ui;//定义一个标签指针QLabel *lab1;QLabel *lab2;QLabel *lab3;//定义行编辑器指针QLineEdit *Edit1;QLineEdit *Edit2;//定义btn按钮指针QPushButton *btn1;QPushButton *btn2;//定义一个播报员指针QTextToSpeech *speecher;};
#endif // WIDGET_H

源文件.sources

#include "form.h"
#include "ui_form.h"Form::Form(QWidget *parent) :        //定义构造函数的实现QWidget(parent),ui(new Ui::Form)               //实例化ui指针的空间
{ui->setupUi(this);           //实例化通过图形化界面拖拽处理的组件的空间,让其依附此界面而存在//固定页面大小this->setFixedSize(400,400);//给lab1实例化空间lab1 = new QLabel("我爱学习", this);//设置大小lab1->resize(80,40);//移动位置lab1->move(160,180);}//析构函数的实现
Form::~Form()
{delete ui;         //释放指针成员ui的空间
}
#include "widget.h"   //自定义类Weidget所在的头文件widget
#include "form.h"     //自定义类Form所的头文件form#include <QApplication>    //应用程序类所在的头文件int main(int argc, char *argv[])
{QApplication a(argc, argv);   //实例化一个应用程序的类对象a,调用有参构造函数Widget w;           //实例化一个Widget的类对象w,调用无参构造函数w.show();          //调用show函数,展示图形化界面Form f;           //实例化一个类对象f,调用无参构造函数//将w中发射的jump信号连接到f的show函数中QObject::connect(&w, &Widget::jump, &f, &Form::show);  //因为connect函数是由QObject类提供的,main函数中没有这个类,所以需要手动指定return a.exec();
}
#include "widget.h"
#include "ui_widget.h"Widget::Widget(QWidget *parent): QWidget(parent), ui(new Ui::Widget)
{ui->setupUi(this);speecher = new QTextToSpeech();//固定窗口大小this->setFixedSize(600, 560);//设置窗口标题this->setWindowTitle("hello");//设置窗口图标this->setWindowIcon(QIcon("C:/Users/asus/Desktop/icon/wodepeizhenshi.png"));//实例化空间,指定父组件,依附于此界面存在lab1 = new QLabel(this);//设置大小lab1->resize(600, 250);//设置图片lab1->setPixmap(QPixmap(":/new/prefix1/icon/logo.png"));//设置图片自适应lab1->setScaledContents(true);//为lab2实例化空间,指定父组件lab2 = new QLabel(this);//设置大小lab2->resize(30, 30);//设置图片lab2->setPixmap(QPixmap(":/new/prefix1/icon/userName.jpg"));//设置图片自适应lab2->setScaledContents(true);//移动位置lab2->move(140, 320);//为lab3实例化空间lab3 = new QLabel();//设置指定父组件,依附此界面存在lab3->setParent(this);//设置大小lab3->resize(30, 30);//设置图片lab3->setPixmap(QPixmap(":/new/prefix1/icon/passwd.jpg"));//设置图片自适应lab3->setScaledContents(true);//移动位置lab3->move(lab2->x(), lab2->y()+80);//无参构造一个行编辑器 QLineEditEdit1 = new QLineEdit();//指定父组件,让其依附于此界面存在Edit1->setParent(this);//设置大小Edit1->resize(240, 40);//设置背景色Edit1->setStyleSheet("background-color:white; border: 1px solid gray; padding: 10px;");//移动位置Edit1->move(lab2->x()+80, lab2->y()-10);//设置占位文本Edit1->setPlaceholderText("QQ/手机/邮箱");//有参构造一个行编辑器 QLineEditEdit2 = new QLineEdit(this);Edit2->resize(Edit1->size());//设置北京四Edit2->setStyleSheet("background-color:white; border: 1px solid gray; padding: 10px;");//移动位置Edit2->move(lab3->x()+80, lab3->y()-10);//设置文本位置Edit2->setPlaceholderText("密码");//设置回显模式Edit2->setEchoMode(QLineEdit::Password);//有参构造一个命令按钮,初始化文本内容,指定父组件 QPushButtonQPushButton *btn1 = new QPushButton("登录", this);//设置大小btn1->resize(80, 40);//移动位置btn1->move(240, Edit2->y()+80);//设置图片btn1->setIcon(QIcon(":/new/prefix1/icon/login.png"));//有参构造一个命令按钮,初始化图标和文本内容,指定父组件QPushButtonQPushButton *btn2 = new QPushButton(QIcon(":/new/prefix1/icon/cancel.png"), "取消", this);//设置大小btn2->resize(btn1->size());//移动位置btn2->move(btn1->x()+120, btn1->y());Edit1->clear();//qt5实现连接connect(btn1, &QPushButton::clicked, this, &Widget::my_login_slot);//参数1:信号发送者//参数2:要发送的信号,发送的信号函数的函数指针变量(函数名),指定是哪个类的, 该信号函数必须是该组件所在类中所具有的信号函数//参数3:信号的接收者//参数4:槽函数, 槽函数的函数指针,指定是哪个类的,该槽函数必须是该组件所在类中具有的槽函数//qt4实现连接// connect(btn2, SIGNAL(clicked()), this, SLOT(my_cancle_slot()));//参数1: 信号的发送者//参数2: 要发送的信号, 该信号函数必须是该组件中所在类中所具有的信号函数,需要使用SIGNAL宏来转换//参数3: 信号的接收者//参数4: 槽函数,该槽函数必须是该组件所在类中具有的槽函数,需要使用SLOT宏来转换connect(btn2, SIGNAL(clicked()), this, SLOT(close()));}Widget::~Widget()
{delete ui;
}//自定义槽函数的实现
void  Widget::my_login_slot()
{//获取ui界面上的用户名和密码//Qstring username = Edit1->text();//Qstring passwd = Edit2->text();if(Edit1->text() == "admin" && Edit2->text() == "123456"){emit jump();qDebug() << "登录成功";speecher->say("登录成功");this->close();}else{qDebug() << "登录失败";speecher->say("登录失败");Edit2->clear();}
}
void Widget::my_cancle_slot()
{this->close();
}

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

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

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

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

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

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

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

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

相关文章

CSS3常用的新功能总结

CSS3常用的新功能包括圆角、阴渐变、2D变换、3D旋转、动画、viewpor和媒体查询。 圆角、阴影 border-redius 对一个元素实现圆角效果&#xff0c;是通过border-redius完成的。属性为两种方式&#xff1a; 一个属性值&#xff0c;表示设置所有四个角的半径为相同值&#xff…

免费SSL/TLS域名证书Certbot配置详细过程

文章目录 1. 在服务器上安装 Certbot2. 停止 web 服务器3. 运行 certbot 命令4. 证书生成位置5. 配置 web 服务器6. 重新加载 web 服务器7. 验证8. 配置自动续期发现问题1. Problem binding to port 80: Could not bind to IPv4 or IPv6.2. live directory exists for example.…

Clion 使用ffmpeg 学习1 开发环境配置

Clion 使用ffmpeg 学习1 开发环境配置 一、准备工作1. 准备环境2. 下载FFmpeg 二、操作步骤1. Clion 新建一个C项目2. 修改 CMakeLists.txt3. 修改配置4. 运行测试5. 打印rtsp 流信息的 demo 一、准备工作 在视频处理和多媒体应用程序开发中&#xff0c;FFmpeg 是一个强大的开…

MS1826A HDMI 多功能视频处理器 HDMI4进1出画面分割芯片

基本介绍 MS1826A 是一款多功能视频处理器&#xff0c;包含 4 路独立 HDMI 音视频输入通道、1 路 HDMI 音视 频输出通道以及 1 路独立可配置为输入或者输出的 SPDIF、I2S 音频信号。支持 4 个独立的字库定 制型 OSD&#xff1b;可处理隔行和逐行视频或者图形输入信号&#xff1…

数学建模--逻辑回归算法的Python实现

首先感谢CSDN上发布吴恩达的机器学习逻辑回归算法任务的各位大佬. 通过大佬的讲解和代码才勉强学会. 这篇文章也就是简单记录一下过程和代码. CSDN上写有关这类文章的大佬有很多,大家都可以多看一看学习学习. 机器学习方面主要还是过程和方法. 这篇文章只完成了线性可分方面的任…

Promise常用方法笔记

mixin.methods.getList(xxx) 是axios的二次封装 是通过Promise进行基本封装 let a mixin.methods.getList(toosSet.gettype);let b mixin.methods.getList(toosSet.gettypes);let c mixin.methods.getList(toosSet.gettypess);Promise.all([a, b, c]).then((res) > {aler…

Python中的函数式编程是什么?

Python中的函数式编程是一种编程范式&#xff0c;它强调使用纯函数和避免可变状态来构建程序。函数式编程的核心思想是将计算视为函数的求值&#xff0c;而不是通过改变状态来实现。在函数式编程中&#xff0c;函数被视为一等公民&#xff0c;可以作为参数传递给其他函数&#…

音频应用编程

目录 ALSA 概述alsa-lib 简介sound 设备节点alsa-lib 移植编写一个简单地alsa-lib 应用程序一些基本概念打开PCM 设备设置硬件参数读/写数据示例代码之PCM 播放示例代码值PCM 录音 使用异步方式PCM 播放示例-异步方式PCM 录音示例-异步方式 使用poll()函数使用poll I/O 多路复用…

【Java-HDFS】使用Java操作HDFS获取HDFS指定目录下的数据量大小

Maven依赖 <dependencies><dependency><groupId>junit</groupId><artifactId>junit</artifactId><version>RELEASE</version></dependency><dependency><groupId>org.apache.logging.log4j</groupId>…

Bridge Champ举办人机对战赛:NFT游戏与传统竞技共生发展编织新格局

概要 现在,NFT与体育竞技正日益紧密地联系在一起。一些体育项目开始推出与赛事或球队相关的NFT,同时也有部分NFT游戏开始举办电子竞技赛事。这种共生发展正在改变体育竞技的生态。 笔者采访了桥牌冠军项目相关负责人,探讨NFT游戏与传统体育竞技的融合潜力。桥牌冠军近期成功举…

postman json复杂数据的模拟

先设置路径 然后可以定义下边数据&#xff08;Key value&#xff09; 也可以不定义 看你的情况 [{"mac": "4C-77-66-19-50-65","addressPattern": "98jd","platform": "ios","registrationId": "…

并查集快速查找

查询元素所在的集合编号&#xff0c;直接返回 id 数组值&#xff0c;O(1) 的时间复杂度。 ... private int find(int p) {assert p > 0 && p < count;return id[p]; } ... 合并元素 p 和元素 q 所属的集合&#xff0c; 合并过程需要遍历一遍所有元素, 再将两个…

风向变了!智能汽车何以「降本」

随着软件定义汽车的概念逐步落地&#xff0c;以及底盘、动力、座舱、智驾、车身等不同域&#xff08;分布式或者混合式&#xff09;的功能更新迭代和融合&#xff0c;汽车行业正在意识到&#xff1a;底层硬件架构重构的迫切性。 事实上&#xff0c;早在2016年&#xff0c;作为传…

UI自动化之关键字驱动

关键字驱动框架&#xff1a;将每一条测试用例分成四个不同的部分 测试步骤&#xff08;Test Step&#xff09;&#xff1a;一个测试步骤的描述或者是测试对象的一个操作说明测试步骤中的对象&#xff08;Test Object&#xff09;&#xff1a;指页面的对象或者元素对象执行的动…

mysql 查询优化 、索引失效

查询优化 物理查询优化 通过索引和表连接方式等技术来进行优化&#xff0c;这里重点需要掌握索引的使用 逻辑查询优化 通过SQL 等价变换 提升查询效率&#xff0c;直白一点就是说&#xff0c;换一种查询写法执行效率可能更高 索引失效 计算、函数、类型转换&#xff08;自动或…

Vue.js 报错:Cannot read property ‘validate‘ of undefined“

错误解决 起因&#xff0c;是我将elemnt-ui登录&#xff0c;默认放在mounted()函数里面&#xff0c;导致vue初始化就调用这个函数。 找了网上&#xff0c;有以下错误原因&#xff1a; 1.一个是你ref写错了&#xff0c;导致获取不了这个表单dom&#xff0c;我这显然不是。 2.…

解决微信小程序回调地狱问题

一、背景 小程序开发经常遇到根据网络请求结果&#xff0c;然后继续 处理下一步业务操作&#xff0c;代码如下&#xff1a; //1第一个请求 wx.request({url:"https://example.com/api/",data:data,success:function(res){//2第二个请求 wx.request({url:"http…

AIGC系列:1.chatgpt可以用来做哪些事情?

上图的意思&#xff1a;神器轩辕剑 那么&#xff0c;在现在AI盛行的信息时代&#xff0c; 你是否知道如何获得和利用ChatGPT这一把轩辕剑来提升你的攻击力和生存能力呢&#xff1f; 故事 程序员小张&#xff1a; 刚毕业&#xff0c;参加工作1年左右&#xff0c;日常工作是C…

TPTU: Task Planning and Tool Usage of Large Language Model-based AI Agents

本文是LLM系列文章&#xff0c;针对《TPTU: Task Planning and Tool Usage of Large Language Model-based AI Agents》的翻译。 TPTU:任务规划和工具使用的LLM Agents 摘要1 引言2 方法3 评估4 相关工作5 结论 摘要 随着自然语言处理的最新进展&#xff0c;大型语言模型&…

【javaweb】学习日记Day9 - Mybatis 基础操作

目录 一、删除 &#xff08;1&#xff09;在mapper接口执行sql删除语句 ① 注解后sql语句没有提示怎么办&#xff1f; &#xff08;2&#xff09;测试层 &#xff08;3&#xff09;开启mybatis日志 &#xff08;4&#xff09;预编译SQL 二、新增 &#xff08;1&#…