qt : day 3

2023-11-18

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

------------------------------------------------------------------
.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 += \
    failed.cpp \
    main.cpp \
    success.cpp \
    widget.cpp

HEADERS += \
    failed.h \
    success.h \
    widget.h
# Default rules for deployment.
qnx: target.path = /tmp/$${TARGET}/bin
else: unix:!android: target.path = /opt/$${TARGET}/bin
!isEmpty(target.path): INSTALLS += target
FORMS += \
    failed.ui \
    success.ui
------------------------------------------------------------------
widget.h
------------------------------------------------------------------
#ifndef WIDGET_H
#define WIDGET_H
#include <QWidget>
#include <QIcon>
#include <QLabel>
#include <QPushButton>
#include <QLineEdit>
#include <QTextToSpeech>
class Widget : public QWidget
{
    Q_OBJECT
public:
    Widget(QWidget *parent = nullptr);
    ~Widget();

private slots:
    void loginslot();
    void cancelslot();
signals:
    void failed_signal();
    void success_signal();
private:
    QPushButton *login_btn;
    QPushButton *cancel_btn;
    QLineEdit *account_edit;
    QLineEdit *pwd_edit;
    QLabel *main_lab;
    QLabel *account_lab;
    QLabel *pwd_lab;

    //创建一个播报员
    QTextToSpeech *speecher = new QTextToSpeech(this);
};
#endif // WIDGET_H
------------------------------------------------------------------
failed.h
------------------------------------------------------------------
#ifndef FAILED_H
#define FAILED_H
#include <QWidget>
#include <QIcon>
#include <QLabel>
namespace Ui {
class failed;
}
class failed : public QWidget
{
    Q_OBJECT
public slots:
    void fail_show();
public:
    explicit failed(QWidget *parent = nullptr);
    ~failed();
private:
    Ui::failed *ui;
};
#endif // FAILED_H
------------------------------------------------------------------
success.h
------------------------------------------------------------------
#ifndef SUCCESS_H
#define SUCCESS_H
#include <QWidget>
#include <QIcon>
#include <QLabel>
namespace Ui {
class success;
}
class success : public QWidget
{
    Q_OBJECT

public slots:
    void success_show();
public:
    explicit success(QWidget *parent = nullptr);
    ~success();
private:
    Ui::success *ui;
};
#endif // SUCCESS_H
------------------------------------------------------------------
main.cpp
------------------------------------------------------------------
#include "widget.h"
#include "failed.h"
#include "success.h"
#include <QApplication>
int main(int argc, char *argv[])
{
    QApplication a(argc, argv);
    Widget w;
    failed f;
    success s;
    QObject::connect(&w,&Widget::failed_signal,&f,&failed::fail_show);
    QObject::connect(&w,&Widget::success_signal,&s,&success::success_show);
    w.show();
    return a.exec();
}
------------------------------------------------------------------
widget.cpp
------------------------------------------------------------------
#include "widget.h"
Widget::Widget(QWidget *parent)
    : QWidget(parent)
{
    //---------------------------------窗口设置---------------------------------
    //设置窗口为固定大小
    this->setFixedSize(540,410);
    //设置窗口icon
    this->setWindowIcon(QIcon("D:/B.work/6qt/day1/icon/wodepeizhenshi.png"));
    //设置窗口名
    this->setWindowTitle("鹏哥快聊");
    //---------------------------------标签设置---------------------------------
    //=====创建界面标签=====
    main_lab = new QLabel(this);
    //修改标签大小
    main_lab->resize(540,200);
    //在标签中插入图片
    main_lab->setPixmap(QPixmap("D:/B.work/6qt/day1/icon/logo.png"));
    //设置为自适应
    main_lab->setScaledContents(1);
    //=====创建账号标签=====
    account_lab = new QLabel(this);
    //修改标签大小
    account_lab->resize(50,40);
    //在标签中插入图片
    account_lab->setPixmap(QPixmap("D:/B.work/6qt/day1/icon/userName.jpg"));
    //移动到合适位置
    account_lab->move(90,220);
    //设置为自适应
    account_lab->setScaledContents(1);
    //=====创建密码标签=====
    pwd_lab = new QLabel(this);
    //修改标签大小
    pwd_lab->resize(account_lab->size());
    //在标签中插入图片
    pwd_lab->setPixmap(QPixmap("D:/B.work/6qt/day1/icon/passwd.jpg"));
    //移动到合适位置
    pwd_lab->move(account_lab->x(),account_lab->y()+80);
    //设置为自适应
    pwd_lab->setScaledContents(1);
    //---------------------------------按钮设置---------------------------------
    //=====创建登录按钮=====
    login_btn = new QPushButton(this);
    //设置按钮大小
    login_btn->resize(100,40);
    //在按钮上插入图片
    login_btn->setIcon(QIcon("D:/B.work/6qt/day1/icon/login.png"));
    //在按钮上输入文本
    login_btn->setText("登录");
    //移动到合适位置
    login_btn->move(270,360);
    connect(login_btn,&QPushButton::clicked,this,&Widget::loginslot);
    //=====创建取消按钮=====
    cancel_btn = new QPushButton(this);
    //设置按钮大小
    cancel_btn->resize(100,40);
    //在按钮上插入图片
    cancel_btn->setIcon(QIcon("D:/B.work/6qt/day1/icon/cancel.png"));
    //在按钮上输入文本
    cancel_btn->setText("取消");
    //移动到合适位置
    cancel_btn->move(login_btn->x()+120,login_btn->y());
    connect(cancel_btn,&QPushButton::clicked,this,&Widget::cancelslot);
    //---------------------------------输入设置---------------------------------
    //=====创建账号输入=====
    account_edit = new QLineEdit(this);
    //设置占位文本
    account_edit->setPlaceholderText("QQ号码/手机/邮箱");
    //设置大小
    account_edit->resize(200,40);
    //移动到适合位置
    account_edit->move(account_lab->x()+100,account_lab->y());
    //=====创建密码输入=====
    pwd_edit = new QLineEdit(this);
    //设置占位文本
    pwd_edit->setPlaceholderText("密码");
    //设置大小
    pwd_edit->resize(account_edit->size());
    //移动到合适位置
    pwd_edit->move(pwd_lab->x()+100,pwd_lab->y());
    //设置回文显示模式
    pwd_edit->setEchoMode(QLineEdit::Password);
}
Widget::~Widget()
{
}
void Widget::loginslot()
{
    //登录成功
    if(account_edit->text()=="admin")
    {
        if(pwd_edit->text()=="123456")
        {
            emit success_signal();
            speecher->say("登录成功");
            this->close();
            return ;
        }
    }
    //登录失败
    emit failed_signal();
    speecher->say("登录失败");
    pwd_edit->clear();
}
void Widget::cancelslot()
{
    this->close();
}
------------------------------------------------------------------
fail.cpp
------------------------------------------------------------------
#include "failed.h"
#include "ui_failed.h"
failed::failed(QWidget *parent) :
    QWidget(parent),
    ui(new Ui::failed)
{
    ui->setupUi(this);
    this->resize(100,70);
    this->setWindowIcon(QIcon("D:/B.work/6qt/day1/icon/cancel.png"));
    QLabel *fail_lab = new QLabel(this);
    fail_lab->setText("登陆失败");
    fail_lab->resize(100,50);
    fail_lab->move(0,10);
}
failed::~failed()
{
    delete ui;
}
void failed::fail_show()
{
    this->show();
}
------------------------------------------------------------------
success.cpp
------------------------------------------------------------------
#include "success.h"
#include "ui_success.h"
success::success(QWidget *parent) :
    QWidget(parent),
    ui(new Ui::success)
{
    ui->setupUi(this);
    QLabel *success_lab = new QLabel("登录成功",this);
    this->setWindowIcon(QIcon("D:/B.work/6qt/day1/icon/login.png"));
    this->resize(100,70);
    success_lab->resize(100,50);
    success_lab->move(0,10);
}
success::~success()
{
    delete ui;
}
void success::success_show()
{
    this->show();
}

2.模拟面试答案

1).多态,虚函数,纯虚函数概念
多态:一个名字的多种用途
静态多态:函数的重载(同一作用域下,定义函数名相同参数列表不同的函数)/运算符的重载(给定大多数运算符特殊的意义作用于类对象,使得代码书写更加简洁)
在编译时已经实现对多态的实现
动态多态:需要借助继承和虚函数完成。
虚函数:父类与子类为继承关系,发生在父子类之间,由父类提供虚函数,子类对父类中的虚函数进行重写操作,父类指针指向子类对象,并调用子类中重写父类的虚函数
纯虚函数:对于某些类中的函数,在该类没有实现的意义与必要,称为抽象类,需要子类对该函数进行重写,就可以把该类定义为纯虚函数
2).将"引用"作为函数参数有哪些特点
函数参数作用:解决函数数据没有交集问题,实现函数直接数据的交流
函数参数传递方式:直接将数据传递给目标函数(不会改变函数外的值),地址传递(修改内存内的值,形参实参一起改变),都需要占用内存空间
引用作为函数参数传递方式:传递值本身(本质还是地址传递,不需要新的容器接收数据,效率高)
3).结构体与联合体的区别
相同点:都属于构造数据类型,由相同或不同数据类型所组成的构造数据类型
不同点:所占内存空间的计算方式不同
结构体:各个成员所占内存空间之和,且遵循字节对齐原则
联合体:所有成员共享同一块内存空间,大小以最大的成员为主,使用时,任何成员都可以访问这片空间,但是访问大小不一样

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

qt : day 3 的相关文章

  • 具有子列表属性映射问题的自动映射器

    我有以下型号 Models public class Dish Required public Int64 ID get set Required public string Name get set Required public str
  • ASP.NET MVC 中的经典 ASP (C#)

    我有一个应用程序想要 最终 转换为 ASP NET MVC 我想要进行全面的服务升级 到 ASP NET 但想要使用当前的 ASP 内容来运行当前的功能 这样我就可以在对新框架进行增量升级的同时升级小部分 该站点严重依赖于不太成熟的 VB6
  • 在搜索 List 时,为什么 Enumerable.Any(Func predicate) 比带有 if 语句的 foreach 慢

    最近有件事引起了我的好奇心 Why is the Enumerable Any Func
  • 迭代变量并查找特定类型实例的技术

    我想迭代进程中内存中的变量 通过插件动态加载 并查找特定类型的实例 以前我可以找到特定类型 或内存中的所有类型 我可以创建类型的实例 我可以获取作为不同类型的字段包含的实例 但我无论如何都不知道只是 搜索 特定类型的实例 一种方法是使用 W
  • 我的线程图像生成应用程序如何将其数据传输到 GUI?

    Mandelbrot 生成器的缓慢多精度实现 线程化 使用 POSIX 线程 Gtk 图形用户界面 我有点失落了 这是我第一次尝试编写线程程序 我实际上并没有尝试转换它的单线程版本 只是尝试实现基本框架 到目前为止它是如何工作的简要描述 M
  • 从 MVC 迁移到 ASP.NET Core 3.1 中的端点路由时,具有角色的 AuthorizeAttribute 不起作用

    我正在尝试将我的项目从 UseMVC asp net core 2 2 兼容样式 升级到 UseEndpoint Routing 并且我的所有请求都被重定向到我的验证失败页面 它与声明有关 如果我删除 Authorize Roles Adm
  • C++:重写已弃用的虚拟方法时出现弃用警告

    我有一个纯虚拟类 它有一个纯虚拟方法 应该是const 但不幸的是不是 该接口位于库中 并且该类由单独项目中的其他几个类继承 我正在尝试使用这个方法const不会破坏兼容性 至少在一段时间内 但我找不到在非常量方法重载时产生警告的方法 以下
  • 访问者和模板化虚拟方法

    在一个典型的实现中Visitor模式 该类必须考虑基类的所有变体 后代 在许多情况下 访问者中的相同方法内容应用于不同的方法 在这种情况下 模板化的虚拟方法是理想的选择 但目前这是不允许的 那么 模板化方法可以用来解析父类的虚方法吗 鉴于
  • 检查算术运算中的溢出情况[重复]

    这个问题在这里已经有答案了 可能的重复 检测 C C 中整数溢出的最佳方法 https stackoverflow com questions 199333 best way to detect integer overflow in c
  • Qt 创建布局并动态添加小部件到布局

    我正在尝试在 MainWindow 类中动态创建布局 我有四个框架 它们是用网格布局对象放置的 每个框架都包含一个自定义的 ClockWidget 我希望 ClockWidget 对象在调整主窗口大小时相应地调整大小 因此我需要将它们添加到
  • 将数据打印到文件

    我已经超载了 lt lt 运算符 使其写入文件并写入控制台 我已经为同一个函数创建了 8 个线程 并且我想输出 hello hi 如果我在无限循环中运行这个线程例程 文件中的o p是 hello hi hello hi hello hi e
  • 基于xsd模式生成xml(使用.NET)

    我想根据我的 xsd 架构 cap xsd 生成 xml 文件 我找到了这篇文章并按照说明进行操作 使用 XSD 文件生成 XML 文件 https stackoverflow com questions 6530424 generatin
  • 生产代码中的 LRU 实现

    我有一些 C 代码 需要使用 LRU 技术实现缓存替换 目前我知道两种实现LRU缓存替换的方法 每次访问缓存数据时使用时间戳 最后比较替换时的时间戳 使用缓存项的堆栈 如果最近访问过它们 则将它们移动到顶部 因此最后底部将包含 LRU 候选
  • 在 C 中使用 GNU automake 中的解析器

    我是 GNU autotools 的新手 在我的项目中使用了 lex 和 yacc 解析器 将它们作为 makefile am 中的源代码会产生以下错误 配置 in AC CHECK PROGS YACC bison yacc none i
  • 当模板类不包含可用的成员函数时,如何在编译时验证模板参数?

    我有以下模板struct template
  • 获取 2 个数据集 c# 中的差异

    我正在编写一个简短的算法 它必须比较两个数据集 以便可以进一步处理两者之间的差异 我尝试通过合并这两个数据集并将结果更改放入新的数据集来实现此目标 我的方法如下所示 private DataSet ComputateDiff DataSet
  • 在类的所有方法之前运行一个方法

    在 C 3 或 4 中可以做到这一点吗 也许有一些反思 class Magic RunBeforeAll public void BaseMethod runs BaseMethod before being executed public
  • strcmp 给出分段错误[重复]

    这个问题在这里已经有答案了 这是我的代码给出分段错误 include
  • 用于 C# XNA 的 Javascript(或类似)游戏脚本

    最近我准备用 XNA C 开发另一个游戏 上次我在 XNA C 中开发游戏时 遇到了必须向游戏中添加地图和可自定义数据的问题 每次我想添加新内容或更改游戏角色的某些值或其他内容时 我都必须重建整个游戏或其他内容 这可能需要相当长的时间 有没
  • 使用 Crypto++ 获取 ECDSA 签名

    我必须使用 Crypto 在变量中获取 ECDSA 签名 我在启动 SignMessage 后尝试获取它 但签名为空 我怎样才能得到它 你看过 Crypto wiki 吗 上面有很多东西椭圆曲线数字签名算法 http www cryptop

随机推荐

  • 集装箱装柜计算机器在线,装箱大师在线计算教程

    原创装箱大师在线计算教程 编辑 小葫芦 来源 PC下载网时间 2018 01 08 10 34 38 1 对于从事装箱设计工作的小伙伴来说 如何高效快速的装箱一直是个难题 不过装箱大师这款软件可以帮助大家解决这个难题 接下来小编就来教大家如
  • UPnP的介绍和理解

    在远程服务器开了一个节点B 然后在自己电脑上启动两个节点A C 用了 bootnodes B命令 A和C都能把B节点添加到自己的列表里 但是A和C不能互相发现是为什么 按理来说B应该把自己知道的节点列表都告诉给他相连的节点吧 答案是 它们会
  • 崇德科技深交所上市:上半年营收2.6亿募资10亿 市值48亿

    雷递网 雷建平 9月20日 湖南崇德科技股份有限公司 简称 崇德科技 证券代码 301548 今日在深交所创业板上市 崇德科技本次发行1500万股 发行价66 8元 募资10亿元 崇德科技原计划募资5 3亿元 这意味着超募了近5亿元 崇德科
  • K9s之Kubernetes集群管理交互工具实践

    文章目录 0x01 基础简介 0x02 安装实践 安装流程 配置示例 0x02 命令实践 命令参数 简单使用 0x01 基础简介 K9s Kubernetes CLI To Manage Your Clusters In Style 描述
  • 快速排序 详解(快速排序 双路快排 三路快排)

    注 内容 图片来自于慕课网liuyubobobo老师的课程 官方代码链接 https github com liuyubobobo Play with Algorithms 快速排序 快速排序可以说是20世纪最伟大的算法之一了 相信都有所耳
  • Stm32 一键下载电路详解

    文章目录 前言 一键下载 一键下载原理 硬件原理图 跳帽与启动 存储映射 串口下载程序由来 一键下载流程 通过 USB 控制机器复位握手 解读 前言 最近在又要折腾 stm32 了 所以翻出了角落里的开发板 先复习下怎么一键下载来着 一键下
  • linux中安装mysql时报错解决方案

    转载于http www cnblogs com xiaolang8762400 p 6950920 html 找了很久才找到 谢谢大神 本人需要找的问题主要是安装时出错的解决方法 本人的文件版本跟原创的版本有点不一样 需要哪个版本自行选择
  • 实战:从Mysql数据库frm文件中,提取表结构创建SQL语句

    需求 在某些特殊的场景下 例如你的mysql数据库无法启动 需要你将表的ibd文件拷贝到另一个数据库中 恢复业务数据库 恢复业务数据的前提 是你需要在另一个数据库中 创建好一模一样的表结构 这时你就需要从Mysql数据库的frm文件中 提取
  • Mysql查询日期timestamp格式的数据

    在Navicat中 时间戳 timestamp 格式的数据表现为 查询某一天的数据 SELECT FROM my table WHERE update time LIKE 2022 10 06 或是 SELECT FROM my table
  • 如何成功开展网络营销?

    企业如要将网上营销开展成功 则必须注意以下方面 1 准确 客观的市场定位 网上营销同传统的营销相比 其前期工作也包括准确客观的市场定位 网上营销与一般营销有较大的区别 因此其市场定位也有其独特的特点 如何准确客观地进行网上营销的市场定位 必
  • CentOS8更换阿里源及解决yum update报错问题

    CentOS更换阿里源 yum makecache提示错误 为 repo base 下载元数据失败 Cannot download repomd xml Cannot download repodata repomd xml All mir
  • GitHub的使用

    文章目录 一 通过实际操作学习Git 1 Git基本操作 2 分支操作 3 更改提交操作 4 推送至远程仓库 5 从远程仓库获取 6 帮助大家深入理解Git资料 二 工具栏 1 键盘快捷键 2 工具栏 3 控制面板 4 仓库 三 与GitH
  • vite插件介绍 - vite-plugin-meta-env

    vite插件介绍 vite plugin meta env a vite plugin define dynamic env variables in import meta env npm github 可以基于本仓库去开发自己的vite
  • 微信小程序怎么设置单个页面颜色/顶部栏颜色/tabBar颜色

    微信小程序怎么设置单个页面的背景颜色 这个其实很简单 看看酱茄小编是怎么操作的 在对应的json里面写入以下代码即可 单页页面的背景颜色设置方法 navigationBarBackgroundColor FFFFFF 小程序tabBar 底
  • 数据清洗---数据整合

    数据整合可以使用Pandas库中merge 函数合并数据集 import pandas as pd 建两个数据集 df1 DataFrame lkey b b a c data1 range 4 df2 DataFrame rkey a b
  • 写selenium常用到的js代码

    selenium可以运行JavaScript代码 可以用一些JavaScript来辅助编写Selelnium代码 1 scrollIntoView 向下拉滚动条 使得某元素可见 IWebElement element driver Find
  • tensorflow NameError: name ‘layers‘ is not defined解决办法

    错误代码 import tensorflow as tf net layers Dense 10 net build 4 10 net kernel NameError name layers is not defined 错误原因 ten
  • 如何使用jquery通过id值修改指定的input的value值

    如何使用jquery通过id值修改指定的input的value值 定义和用法 示例代码 改变动态id的input值 定义和用法 val 方法返回或设置被选元素的值 元素的值是通过 value 属性设置的 该方法大多用于 input 元素 如
  • ant design pro v5 动态路由

    ant design pro v5 动态菜单 1 添加模拟数据 2 添加request请求 3 修改app tsx文件 a 第一步修改getInitialState b 第二步修改layout 4 app tsx 完整代码 5 解决icon
  • qt : day 3

    1 完成登录框的按钮操作 并在登录成功后进行界面跳转 pro QT core gui texttospeech greaterThan QT MAJOR VERSION 4 QT widgets CONFIG c 11 The follow