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

2023-11-04

登录界面跳转

配置文件 .pro

QT       += core gui texttospeech

greaterThan(QT_MAJOR_VERSION, 4): QT += widgets

CONFIG += 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.0

SOURCES += \
    form.cpp \
    main.cpp \
    widget.cpp

HEADERS += \
    form.h \
    widget.h

FORMS += \
    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 += target

RESOURCES += \
    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_NAMESPACE

class Widget : public QWidget
{
    Q_OBJECT

public:
    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);

    //无参构造一个行编辑器 QLineEdit
    Edit1 = 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/手机/邮箱");

    //有参构造一个行编辑器 QLineEdit
    Edit2 = 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);

    //有参构造一个命令按钮,初始化文本内容,指定父组件 QPushButton
    QPushButton *btn1 = new QPushButton("登录", this);
    //设置大小
    btn1->resize(80, 40);
    //移动位置
    btn1->move(240, Edit2->y()+80);
    //设置图片
    btn1->setIcon(QIcon(":/new/prefix1/icon/login.png"));

    //有参构造一个命令按钮,初始化图标和文本内容,指定父组件QPushButton
    QPushButton *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、结构体和联合体有何区别?
答:结构体与联合体都是构造数据类型,都是由相同或不同的数据类型构造而成。但是结构体每个成员地址连续,结构体大小由每个成员的字节大小字节对齐原则决定。而联合体大小由其成员中字节最大的决定,所有成员共用一片空间。
 

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

qt 信号与槽机制,登录界面跳转 的相关文章

随机推荐

  • TypeScript中数组类型的定义

    TypeScript中数组类型的定义 现在我们可以定义一个最简单的数组类型 比如就是数字类型 那么就可以这么写 const numberArr 1 2 3 这时候你把鼠标放在numberArr上面可以看出 这个数组的类型就是 number
  • 【Linux】进程间通信

    文章目录 1 进程间通信基础 2 管道 2 1匿名管道 2 1 1匿名管道的原理 2 2匿名管道的特点 2 3匿名管道函数 2 3 1用例 2 3 2实现ps ajx grep bash指令 2 4匿名管道的特点 2 5管道的大小 2 6管
  • 项目管理计算-- PV、EV、AC、BAC、EAC、ETC等计算公式含义

    一 总浮动时间TF和自由浮动时间FF的差别 项目进度网络图 其中每个小方块里面的若干数字是啥意思呢 最早开始时间 ES 最早结束时间 EF 最迟开始时间 LS 最迟结束时间 LF TF Total Flow 总浮动时间 FF Free Fl
  • 史上最全的 Hexo 博客搭建配置完全指南

    欢迎到我的博客查看最新文章 https blog clouder im 本篇博客基于 Centos 7 x root 用户 最近利用 Hexo Github Pages 搭建了一个博客 总体来说比较满意 中间也踩了不少坑 于是将我的配置过程
  • LevelDB使用指南

    这篇文章是levelDB官方文档的译文 原文地址 LevelDB library documentation 这篇文章主要讲leveldb接口使用和注意事项 leveldb是一个持久型的key value数据库 key value可以是任意
  • Node.js 搭配 Socket.io 实现与客户端实时通信

    最近准备用react搭建node搭建一个大数据可视化平台 并且服务端利用到socket io 客户端利用到socket io client 这里总结下基本使用方式 安装 npm i express socket io socket io c
  • SQLi LABS Less-34

    第三十四关注入点为 单引号字符串型 注入类型为 报错注入 此关卡通过 代码WAF 将单引号 转义成 我们使用 编译 绕过WAF 先上结果 and updatexml 1 concat 0x7e substr select group con
  • Delphi多层开发方案比较

    以下转载自 http blog sina com cn s blog 53decb4101009a5m html type v5 one label rela nextarticle http blog csdn net SmallHand
  • 华为机试HJ60 查找组成一个偶数最接近的两个素数

    HJ60 查找组成一个偶数最接近的两个素数 Python 题目 解题思路 代码 结果 题目 解题思路 1 多组输入 需要循环 2 先创建一个判断是否素数的函数以备调用 素数判断 从1以后开始 如果到该数一半的位置有可以整除的数 则不是素数
  • 【pygame杂记】字体

    这一节放在这里挺突兀的 但是因为今天开周会 晚回来了 而且吃晚饭还吃撑了所以就简单写一下吧 举个栗子进行简述 我们知道在python中所有的东西都可以抽象成对象 在这里 我们创建了一个字体的对象 创建字体对象 font pygame fon
  • android Handler详细使用方法实例

    开发环境为android4 1 Handler使用例1 这个例子是最简单的介绍handler使用的 是将handler绑定到它所建立的线程中 本次实验完成的功能是 单击Start按钮 程序会开始启动线程 并且线程程序完成后延时1s会继续启动
  • DDL语言的使用

    第1关 创建数据库 编程要求 在右侧窗口编写 SQL 并创建一个名为 teachingdb 的教学数据库 连接数据库的用户名为 root 密码为 123123 请在此编写代码 操作完毕之后点击评测 Begin create database
  • 蓝桥杯VIP算法训练-轨道炮-看完秒懂的(c++map)

    题目描述 小明在玩一款战争游戏 地图上一共有 N 个敌方单位 可以看作 2D 平面上的点 其中第 i 个单位在 0 时刻的位置是 Xi Yi 方向是 Di 上下左右之一 用 U D L R 表示 速度是 Vi 小明的武器是轨道炮 只能使用一
  • Typescript--Typescript中的新增类型

    一 any any表示的是任意类型 一个变量设置类型为any后 相当于该变量管理了TS的类型检测 尽量不要用any let d any 声明变量如果不指定类型 则TS解析器会自动判断变量的类型为any 隐式的any let d d 10 d
  • DataFrame数据的多种遍历方法

    后续补充 遍历DataFrame的三种方法 iteritem 方法返回一个
  • Unity初探(光源类型与光照模式)

    0 引子 unity的光源有四种 每种光源都有3种光照模式 而场景中不同模式的光源而且对静态和动态的对象有不同的效果 而官方文档又显得有点晦涩难懂 如果是初学者第一次阅读 比如说我 难免会被场景中动态和静态游戏对象与不同模式光源的交互 以及
  • 【DATAX】datax读取hive分区表时,空分区任务报错问题解决

    问题场景 之前在 Dolphinscheduler调度Datax任务读取Hive分区表案例 博客中我分享了调度任务读取hive分区的几个场景 当时提到了分区中有空文件的解决方案 除此之外 我们还遇到了空分区的场景 即该分区没有数据 连所谓的
  • BLS with Random Oracle; BLS 短签名在随机谕言机模型下的安全证明 内容小结

    BLS with Random Oracle BLS 短签名在随机谕言机模型下的安全证明 内容小结 密码学安全规约推荐书目 博客为这两本书学习笔记与内容小结 密码学中的可证明安全性 杨波 清华大学出版社 Introduction to Se
  • 优化图形性能

    良好的性能对很多游戏的成功至关重要 以下几条简单法则有助于将游戏的渲染速度最大化 找出影响图形性能的主要因素 游戏的图形部分主要影响计算机的两个系统 CPU 和 GPU 找到性能问题所在是一切优化的首要法则 因为 GPU 与 CPU 的优化
  • qt 信号与槽机制,登录界面跳转

    登录界面跳转 配置文件 pro QT core gui texttospeech greaterThan QT MAJOR VERSION 4 QT widgets CONFIG c 11 The following define make