2.20 Qt day1

news2024/12/23 3:25:31

一. 思维导图

二. 消化常用类的使用,以及常用成员函数对应的功能

按钮类QPushButton:

mywidget.h:

#ifndef MYWIDGET_H
#define MYWIDGET_H

#include <QWidget>
#include<QPushButton>//按钮类
#include<QIcon>

class MyWidget : public QWidget
{
    Q_OBJECT

public:
    MyWidget(QWidget *parent = nullptr);
    ~MyWidget();
};
#endif // MYWIDGET_H

main.cpp:

#include "mywidget.h"

#include <QApplication>

int main(int argc, char *argv[])
{
    QApplication a(argc, argv);
    MyWidget w;
    w.show();
    return a.exec();
}

mywidget.cpp:

#include "mywidget.h"

MyWidget::MyWidget(QWidget *parent)
    : QWidget(parent)
{
    //创建第一个按钮
    QPushButton *btn1=new QPushButton;
    //btn1->show();//show会使组件独立显示
    //让组件依赖于窗口显示,则需要对其设置父组件
    btn1->setParent(this);
    //给按钮设置文本
    btn1->setText("第一个按钮");
    //给按钮设置背景颜色
    //btn1->setStyleSheet("background-color:pink");
    btn1->setStyleSheet("background-color:rgb(255,0,255)");
    //给按钮设置一个图标
    btn1->setIcon(QIcon("C:\\Users\\LZ8\\Desktop\\picture\\qq.png"));
    //创建第二个按钮
    QPushButton *btn2=new QPushButton("第二个按钮",this);
    //给按钮设置一个图标
    btn2->setIcon(QIcon("C:\\Users\\LZ8\\Desktop\\picture\\qq.png"));
    //给按钮设置背景颜色
    btn2->setStyleSheet("background-color:green");
    //移动按钮
    btn2->move(0,30);
    //设置按钮大小
    btn2->resize(150,30);
    //创建第三个按钮
    QPushButton *btn3=new QPushButton
            (QIcon("C:\\Users\\LZ8\\Desktop\\picture\\qq.png"),
            "第三个按钮",this);
    //给按钮设置背景颜色
    btn3->setStyleSheet("background-color:blue");
    //移动按钮
    btn3->move(0,60);
    //设置按钮大小
    btn3->resize(200,30);
    //设置按钮不可用状态
    btn3->setEnabled(false);
}

MyWidget::~MyWidget()
{
}

运行结果:

行编辑器类QLineEdit:

mywidget.h:

#ifndef MYWIDGET_H
#define MYWIDGET_H

#include <QMainWindow>
#include<QLineEdit>//行编辑器类

class MyWidget : public QMainWindow
{
    Q_OBJECT

public:
    MyWidget(QWidget *parent = nullptr);
    ~MyWidget();
};
#endif // MYWIDGET_H

main.cpp:

#include "mywidget.h"

#include <QApplication>

int main(int argc, char *argv[])
{
    QApplication a(argc, argv);
    MyWidget w;
    w.show();
    return a.exec();
}

mywidget.cpp:

#include "mywidget.h"

MyWidget::MyWidget(QWidget *parent)
    : QMainWindow(parent)
{
    this->resize(540,410);
    //创建第一个行编辑器
    QLineEdit *edit1=new QLineEdit;
    //指定父组件
    edit1->setParent(this);
    //设置显示模式  密码
    edit1->setEchoMode(QLineEdit::Password);
    edit1->resize(100,30);
    //创建第二个行编辑器
    QLineEdit *edit2=new QLineEdit("张三",this);
    edit2->move(0,30);
    //创建第三个行编辑器
    QLineEdit *edit3=new QLineEdit(this);
    //设置显示模式 输入该行编辑器时可见,输入其他行编辑器时不可见
    edit3->setEchoMode(QLineEdit::PasswordEchoOnEdit);
    edit3->move(0,60);
    //设置占位
    edit3->setPlaceholderText("账号");
}

MyWidget::~MyWidget()
{
}

运行结果:

标签类QLabl:

mywidget.h:

#ifndef MYWIDGET_H
#define MYWIDGET_H

#include <QWidget>
#include<QLabel>//标签类

class MyWidget : public QWidget
{
    Q_OBJECT

public:
    MyWidget(QWidget *parent = nullptr);
    ~MyWidget();
};
#endif // MYWIDGET_H

main.cpp:

#include "mywidget.h"

#include <QApplication>

int main(int argc, char *argv[])
{
    QApplication a(argc, argv);
    MyWidget w;
    w.show();
    return a.exec();
}

mywidget.cpp:

#include "mywidget.h"

MyWidget::MyWidget(QWidget *parent)
    : QWidget(parent)
{
    this->resize(540,410);
    this->setFixedSize(540,410);
    //创建一个标签
    QLabel *lab1=new QLabel;
    lab1->setParent(this);
    lab1->setText("我是一个标签");
    lab1->resize(100,30);
    lab1->setStyleSheet("background-color:pink");
    //创建第二个标签
    QLabel *lab2=new QLabel("标签",this);
    lab2->resize(200,100);
    lab2->move(170,0);
    //设置图片
    lab2->setPixmap(QPixmap("C:\\Users\\LZ8\\Desktop\\picture\\logo"));
    //设置图片自动适应标签
    lab2->setScaledContents(true);
}

MyWidget::~MyWidget()
{
}

运行结果:

三. 自由发挥登录窗口的应用场景,实现一个登录窗口页面,要求:每行代码都要有注释

MyWidget.h:

#ifndef MYWIDGET_H
#define MYWIDGET_H

#include <QWidget>
#include<QIcon>
#include<QLabel>//标签类
#include<QMovie>//动图类
#include<QLineEdit>//行编辑器类
#include<QPushButton>//按钮类

class MyWidget : public QWidget
{
    Q_OBJECT

public:
    MyWidget(QWidget *parent = nullptr);
    ~MyWidget();
};
#endif // MYWIDGET_H

main.cpp:

#include "mywidget.h"

#include <QApplication>

int main(int argc, char *argv[])
{
    QApplication a(argc, argv);
    MyWidget w;
    w.show();
    return a.exec();
}

MyWidget.cpp:

#include "mywidget.h"

MyWidget::MyWidget(QWidget *parent)
    : QWidget(parent)
{
    //========窗口相关设置
    this->setWindowTitle("酷狗第三方平台登录");//设置窗口标题
    this->setWindowIcon(QIcon("C:\\Users\\LZ8\\Desktop\\picture\\kugou"));//设置窗口图标
    //this->setWindowFlag(Qt::FramelessWindowHint);//去掉头部 设置纯净窗口
    this->resize(900,550);//设置窗口大小
    this->setStyleSheet("background-color:white");//设置窗口背景
    //=========标签相关设置
    QLabel *lab1=new QLabel(this);//创建标签lab1
    lab1->resize(85,45);//设置标签大小
    lab1->move(50,20);//移动标签
    lab1->setStyleSheet("background-color:green");//设置标签背景
    lab1->setPixmap(QPixmap("C:\\Users\\LZ8\\Desktop\\picture\\qqq"));//设置标签图片
    lab1->setScaledContents(true);//设置图片自动适应标签
    QLabel *lab2=new QLabel("快捷登录",this);//创建标签lab2
    lab2->resize(120,40);//设置标签大小
    lab2->move(230,90);//移动标签
    lab2->setFont(QFont("Arial",15));//设置标签字体大小
    QLabel *lab3=new QLabel(this);//创建标签lab3
    lab3->setText("使用QQ手机版扫码登录或点击头像授权登录");//给标签添加文本
    lab3->resize(320,20);//设置标签大小
    lab3->move(140,135);//移动标签
    QLabel *lab4=new QLabel(this);//创建标签lab4
    lab4->resize(106,106);//设置标签大小
    lab4->move(165,190);//移动标签
    lab4->setPixmap(QPixmap("C:\\Users\\LZ8\\Desktop\\picture\\QRcode"));//设置标签图片
    lab4->setScaledContents(true);//设置图片自动适应标签
    QLabel *lab5=new QLabel(this);//创建标签lab5
    lab5->resize(106,106);//设置标签大小
    lab5->move(275,190);//移动标签
    lab5->setPixmap(QPixmap("C:\\Users\\LZ8\\Desktop\\picture\\qq0"));//设置标签图片
    lab5->setScaledContents(true);//设置图片自动适应标签
    QLabel *lab6=new QLabel(this);//创建标签lab6
    lab6->resize(560,250);//设置标签大小
    lab6->move(0,300);//移动标签
    QMovie *mv=new QMovie("C:\\Users\\LZ8\\Desktop\\picture\\gou.gif");//动图类 QMovie
    mv->setParent(this);//设置父组件
    lab6->setMovie(mv);//将动图设置到标签中
    lab6->setScaledContents(true);//让动图自动适应标签
    mv->start();//让动图动起来
    QLabel *lab7=new QLabel(this);//创建标签lab7
    lab7->resize(35,35);//设置标签大小
    lab7->move(600,100);//移动标签
    lab7->setPixmap(QPixmap("C:\\Users\\LZ8\\Desktop\\picture\\wodepeizhenshi"));//设置标签图片
    lab7->setScaledContents(true);//设置图片自动适应标签
    QLabel *lab8=new QLabel(this);//创建标签lab8
    lab8->resize(35,35);//设置标签大小
    lab8->move(600,140);//移动标签
    lab8->setPixmap(QPixmap("C:\\Users\\LZ8\\Desktop\\picture\\passwd"));//设置标签图片
    lab8->setScaledContents(true);//设置图片自动适应标签
    //==========行编辑器相关设置
    QLineEdit *edit1=new QLineEdit(this);//创建行编辑器edit1
    edit1->move(640,100);//移动行编辑器
    edit1->resize(200,35);//设置行编辑器大小
    edit1->setPlaceholderText("QQ账号");//设置占位
    QLineEdit *edit2=new QLineEdit(this);//创建行编辑器edit2
    edit2->move(640,140);//移动行编辑器
    edit2->resize(200,35);//设置行编辑器大小
    edit2->setPlaceholderText("密码");//设置占位
    edit2->setEchoMode(QLineEdit::Password);//设置显示模式 输入该行编辑器时不可见
    //=========登录按钮相关设置
    QPushButton *btn=new QPushButton("登录",this);//创建按钮btn
    btn->resize(240,35);//设置按钮大小
    btn->move(600,310);//移动按钮
    btn->setStyleSheet("background-color:rgb(0,153,255);color:white;border-radius:5");
                 //更改background-color:背景颜色  color:字体颜色  border-radius:按钮四个角的弧度
    //595*505
    QPushButton *btn1=new QPushButton("注册账号",this);//创建按钮btn1
    btn1->move(580,505);//移动按钮
    btn1->resize(70,20);//设置按钮大小
    QPushButton *btn2=new QPushButton("找回密码",this);//创建按钮btn2
    btn2->move(690,505);//移动按钮
    btn2->resize(70,20);//设置按钮大小
    QPushButton *btn3=new QPushButton("意见反馈",this);//创建按钮btn3
    btn3->move(800,505);//移动按钮
    btn3->resize(70,20);//设置按钮大小
}

MyWidget::~MyWidget()
{
}

结果:

 模拟面试:

1.构造函数中可以定义虚指针吗?

答:不可以

在C++中,构造函数本身不直接定义虚指针,但虚指针是类在包含至少一个虚函数时由编译器自动添加的。当类被声明为包含至少一个虚函数时,编译器会在类对象中添加一个指向虚函数表的指针,通常被称为虚指针。

虚指针是动态多态性(也称为运行时多态性)的关键,它允许通过基类指针或引用调用派生类的虚函数。当基类指针或引用指向派生类对象时,虚指针会指向派生类的虚函数表,从而确保调用正确的函数版本。

构造函数在对象创建时被调用,而虚指针是在对象创建后由编译器自动初始化的。因此,构造函数本身不直接定义虚指针,但可以通过初始化列表来初始化基类的虚函数表。

2.简单说说你使用C++11的哪些特性?

答:auto、lambda表达式、智能指针

auto:auto修饰变量时,可以自动推导出变量的数据类型

lambda表达式:当需要一个匿名的,临时的,可以捕获外界变量的函数时,可以用lambda表达式完成。

智能指针:C++中在堆区申请空间和释放空间需要使用newdelete完成 申请了内存空间,使用后没有释放内存空间,堆区对象没有得到析构,栈取申请的对象空间,在脱离对象空间后,会自动调用析构函数完成资源的回收,为了保证堆区空间使用的安全性,引入了智能指针,目的是更加安全的使用堆区空间。

3.实现多态的重要机制?

答:继承和虚函数

多态:父类的指针或者引用,可以指向或者初始化子类的对象,调用子类对父类重写的函数,进而展开子类的功能。

继承:在C++中,多态的概念是基于类的继承关系来实现的。子类可以继承父类的属性和方法,并且可以添加或覆盖父类的方法。这种继承关系为多态的实现提供了基础。

虚函数:在C++中,多态的实现主要通过虚函数(virtual function)来完成。当一个类中的成员函数被声明为虚函数时,它可以在派生类中被覆盖(override)。在运行时,根据对象的实际类型(动态绑定),调用相应的函数实现。这种机制使得我们可以通过基类指针或引用来调用派生类中的函数,实现多态。

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

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

相关文章

vscode 插件 Marp for VS Code 制作 ppt

话不多说&#xff0c;直接上图 用它来写幻灯片&#xff0c;简直不要太好用&#xff0c;如果你一直使用 markdown 语法写笔记的话&#xff0c;那么做 ppt 对你来说简直就是喝水&#xff1b; 在vscode 上面直接装一个Marp for VS Code插件就可以了 基本使用方法步骤 crtl win …

Flutter自定义tabbar任意样式

场景描述 最近在使用遇到几组需要自定义的tabbar或者类似组件&#xff0c;在百度查询资料中通常&#xff0c;需要自定义 TabIndicator extends Decoration 比如上图中的带圆角的指示器这样实现 就很麻烦&#xff0c; 搜出来的相关也是在此之处上自己画&#xff0c;主要再遇…

OpenLDAP接入NineData SSO

本文面向使用 OpenLDAP 管理人员账户信息的企业&#xff0c;提供将 OpenLDAP 接入单点登录&#xff08;SSO&#xff09;的最佳实践指南&#xff0c;以实现统一认证和授权管理。通过集成 OpenLDAP、phpLDAPadmin、Keycloak&#xff0c;您可以轻松通过 SSO 功能登录 NineData。 …

Android13 编译ninja failed with: exit status 137

描述 现象很奇怪&#xff0c;主机是ubuntu 18.04&#xff0c; 内存有32G&#xff0c;并且系统中有两份Android13代码&#xff0c; 有一份编译正常&#xff0c;另外一份编译不正常&#xff0c;一度以为是因为下载源码不齐全导致&#xff0c;后面仔细看日志&#xff0c;原来是内…

压缩感知(Compressed Sensing)的MATLAB仿真实现

在前一篇文章&#xff1a;正交匹配追踪&#xff08;Orthogonal Matching Pursuit, OMP&#xff09;的MATLAB实现中&#xff0c;我们介绍了针对稀疏信号进行压缩感知的MATLAB仿真。 本篇我们介绍一下针对的是原始的非稀疏信号&#xff0c;看看如何进行处理。 本文中&#xff0c;…

uniapp运动课程健身打卡系统微信小程序

考虑到实际生活中在我来运动管理方面的需要以及对该系统认真的分析,将系统分为小程序端模块和后台管理员模块&#xff0c;权限按管理员和用户这两类涉及用户划分。 (a) 管理员&#xff1b;管理员使用本系统涉到的功能主要有&#xff1a;首页、个人中心、用户管理、课程类别管理…

计算机设计大赛 深度学习动物识别 - 卷积神经网络 机器视觉 图像识别

文章目录 0 前言1 背景2 算法原理2.1 动物识别方法概况2.2 常用的网络模型2.2.1 B-CNN2.2.2 SSD 3 SSD动物目标检测流程4 实现效果5 部分相关代码5.1 数据预处理5.2 构建卷积神经网络5.3 tensorflow计算图可视化5.4 网络模型训练5.5 对猫狗图像进行2分类 6 最后 0 前言 &#…

静态时序分析:保持时间分析

相关阅读 静态时序分析https://blog.csdn.net/weixin_45791458/category_12567571.html?spm1001.2014.3001.5482 在静态时序分析中&#xff0c;保持时间检查约束了触发器时钟引脚&#xff08;时钟路径&#xff09;和输入数据引脚&#xff08;数据路径&#xff09;之间的时序关…

虚拟机安装Centos7迷你版

虚拟机安装Centos7迷你版 迷你版较常规版精简了很多功能&#xff0c;所以体积也小了很多&#xff0c;喜欢自定义安装的可以选择迷你版 参考文章&#xff1a; VirtualBox虚拟机安装Centos7详细教程图解 网卡配置参考文章 下载Centos迷你版镜像 安装镜像 下载镜像 阿里云Cen…

【Python】【VS Code】VS Code中python.json和setting.json文件配置说明

目录 1. python.json配置 2. setting.json配置 3. 解决中文乱码 4. 实现效果 1. python.json配置 python.json 获取步骤&#xff1a;文件 -> 首选项 -> 配置用户代码片段 -> python 此为VS Code的头文件设置&#xff0c;复制以下内容到 python.json {"HEADER…

【爬虫JS逆向-工具篇】浏览器内存漫游加密参数Hook实战教程

文章目录 1. 写在前面2. 环境搭建2. 加密定位实战 【作者主页】&#xff1a;吴秋霖 【作者介绍】&#xff1a;Python领域优质创作者、阿里云博客专家、华为云享专家。长期致力于Python与爬虫领域研究与开发工作&#xff01; 【作者推荐】&#xff1a;对JS逆向感兴趣的朋友可以关…

如何高效测试APP,快速定位bug?

一般提到测试&#xff0c;很多人会想到考试&#xff0c;但任意一个APP面世之前&#xff0c;也都需要多次测试&#xff0c;确保可以正常使用之后才会面世。有的公司会有专门的测试工程师&#xff0c;而在一般的互联网公司&#xff0c;大多由产品经理、工程师、设计师等兼职&…

vulnhub练习 DC-1复现及分析

一、搭建环境 1.工具 靶机&#xff1a;DC-1 192.168.200.17 攻击机&#xff1a;kali 192.168.200.13 2.注意 攻击机和靶机的网络连接方式要相同&#xff0c;另外DC-1的网络连接方式我这里采用NAT模式&#xff0c;是与kali的网络连接模式相同的&#xff08;当然亦可以选用桥…

unity学习(28)——登录功能

有之前注册的知识&#xff0c;登录就很容易处理了。 登陆成功返回id&#xff1a; 登录失败返回null&#xff1a; 测试同一账号不能重复登陆&#xff01;登录成功后最好可以跳到新的场景中 结果是好的&#xff0c;去服务器看一下对应部分的代码&#xff0c;可见&#xff0c;登…

多端开发围炉夜话

文章目录 一、多端开发 一、多端开发 uni-app 官网 UNI-APP中的UI框架&#xff1a;介绍常用的UI框架及其特点 uView UIVant WeappColor UIMint UI uniapp嵌入android原生开发的功能 uniapp使用安卓原生sdk uni-app中的uni.requireNativePlugin Qt for iOS Qt for Android

Deep Layer Aggregation(CVPR 2018)原理与代码解析

paper&#xff1a;Deep Layer Aggregation official implementation&#xff1a;https://github.com/ucbdrive/dla third-party implementation&#xff1a;https://github.com/huggingface/pytorch-image-models/blob/main/timm/models/dla.py 本文的创新点 骨干网络的设计…

Spring Boot利用Kaptcha生成验证码

生成验证码 我们在登录或注册某个网站的时候&#xff0c;会需要我们输入验证码&#xff0c;才能登录注册&#xff0c;那么如何生成验证码呢&#xff1f;其实&#xff0c;生成验证码我们可以用Java Swing在后台内存里的区域画一个出来&#xff0c;但是非常麻烦&#xff0c;所以…

Linux系统——nginx服务介绍

一、Nginx——高性能的Web服务端 Nginx的高并发性能优于httpd服务 1.nginx概述 Nginx是由1994年毕业于俄罗斯国立莫斯科鲍曼科技大学的同学为俄罗斯rambler.ru公司开发的&#xff0c;开发工作最早从2002年开始&#xff0c;第一次公开发布时间是2004年10月4日&#xff0c;版本…

KubeSphere 镜像构建器(S2I)服务证书过期解决方案

目前 KubeSphere 所有 3.x.x 版本&#xff0c;如果开启了 DevOps 模块并使用了镜像构建器功能&#xff08;S2I&#xff09;都会遇到证书过期问题。 解决方法 已开启 DevOps 模块 下载这个更新 S2I 服务证书压缩包&#xff0c;上传到任一可以访问 K8s 集群的节点&#xff1b; …

Java Web(一)--介绍

Java Web 技术体系图 三大组成部分&#xff1a; 前端&#xff1a; 前端开发技术工具包括三要素&#xff1a;HTML、CSS 和 JavaScript&#xff1b;其他高级的前端框架&#xff0c;如bootstrap、jquery&#xff0c;VUE 等。 后端&#xff1a; 后端开发技术工具主要有&am…