2.20 Qt day1

一. 思维导图

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

按钮类QPushButton:

mywidget.h:

#ifndef MYWIDGET_H
#define MYWIDGET_H#include <QWidget>
#include<QPushButton>//按钮类
#include<QIcon>class MyWidget : public QWidget
{Q_OBJECTpublic: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_OBJECTpublic: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_OBJECTpublic: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_OBJECTpublic: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);//创建标签lab1lab1->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);//创建标签lab2lab2->resize(120,40);//设置标签大小lab2->move(230,90);//移动标签lab2->setFont(QFont("Arial",15));//设置标签字体大小QLabel *lab3=new QLabel(this);//创建标签lab3lab3->setText("使用QQ手机版扫码登录或点击头像授权登录");//给标签添加文本lab3->resize(320,20);//设置标签大小lab3->move(140,135);//移动标签QLabel *lab4=new QLabel(this);//创建标签lab4lab4->resize(106,106);//设置标签大小lab4->move(165,190);//移动标签lab4->setPixmap(QPixmap("C:\\Users\\LZ8\\Desktop\\picture\\QRcode"));//设置标签图片lab4->setScaledContents(true);//设置图片自动适应标签QLabel *lab5=new QLabel(this);//创建标签lab5lab5->resize(106,106);//设置标签大小lab5->move(275,190);//移动标签lab5->setPixmap(QPixmap("C:\\Users\\LZ8\\Desktop\\picture\\qq0"));//设置标签图片lab5->setScaledContents(true);//设置图片自动适应标签QLabel *lab6=new QLabel(this);//创建标签lab6lab6->resize(560,250);//设置标签大小lab6->move(0,300);//移动标签QMovie *mv=new QMovie("C:\\Users\\LZ8\\Desktop\\picture\\gou.gif");//动图类 QMoviemv->setParent(this);//设置父组件lab6->setMovie(mv);//将动图设置到标签中lab6->setScaledContents(true);//让动图自动适应标签mv->start();//让动图动起来QLabel *lab7=new QLabel(this);//创建标签lab7lab7->resize(35,35);//设置标签大小lab7->move(600,100);//移动标签lab7->setPixmap(QPixmap("C:\\Users\\LZ8\\Desktop\\picture\\wodepeizhenshi"));//设置标签图片lab7->setScaledContents(true);//设置图片自动适应标签QLabel *lab8=new QLabel(this);//创建标签lab8lab8->resize(35,35);//设置标签大小lab8->move(600,140);//移动标签lab8->setPixmap(QPixmap("C:\\Users\\LZ8\\Desktop\\picture\\passwd"));//设置标签图片lab8->setScaledContents(true);//设置图片自动适应标签//==========行编辑器相关设置QLineEdit *edit1=new QLineEdit(this);//创建行编辑器edit1edit1->move(640,100);//移动行编辑器edit1->resize(200,35);//设置行编辑器大小edit1->setPlaceholderText("QQ账号");//设置占位QLineEdit *edit2=new QLineEdit(this);//创建行编辑器edit2edit2->move(640,140);//移动行编辑器edit2->resize(200,35);//设置行编辑器大小edit2->setPlaceholderText("密码");//设置占位edit2->setEchoMode(QLineEdit::Password);//设置显示模式 输入该行编辑器时不可见//=========登录按钮相关设置QPushButton *btn=new QPushButton("登录",this);//创建按钮btnbtn->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*505QPushButton *btn1=new QPushButton("注册账号",this);//创建按钮btn1btn1->move(580,505);//移动按钮btn1->resize(70,20);//设置按钮大小QPushButton *btn2=new QPushButton("找回密码",this);//创建按钮btn2btn2->move(690,505);//移动按钮btn2->resize(70,20);//设置按钮大小QPushButton *btn3=new QPushButton("意见反馈",this);//创建按钮btn3btn3->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.mzph.cn/news/693109.shtml

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

相关文章

springboot+vue项目基础开发(17)路由使用

路由 在前端中,路由指的是根据不同的访问路径,展示不同的内容 vue Router的vue.js的官方路由 安装vue Router 再启动 在src下面新建router文件,创建index.js 代码 import {createRouter,createWebHashHistory} from vue-router //导入组件 import Login from @/views/Log…

Kubernetes kubeadm 证书到期,更新证书

1.环境说明 lient Version: version.Info{Major:"1", Minor:"19", GitVersion:"v1.19.6", GitCommit:"fbf646b339dc52336b55d8ec85c181981b86331a", GitTreeState:"clean", BuildDate:"2020-12-18T12:09:30Z", G…

智慧水利数字孪生可视化,满屏黑科技!A3D引擎支持,免费即可搭建

2024年1月&#xff0c;在北京召开的全国水利工作会议&#xff0c;强调了要大力推进数字孪生水利建设&#xff0c;全面提升水利监测感知能力。 除此之外&#xff0c;2035年远景目标也提出&#xff1a;构建智慧水利体系&#xff0c;以流域为单元提升水情测报和智能调度能力。《数…

Open CASCADE学习|为什么由Edge生成Wire不成功?

Wire 是一种复合形状&#xff0c;不是由几何形状构建的&#xff0c;而是由边缘的装配构建的。BRepBuilderAPI_MakeWire类可以从一个或多个Edge构建Wire&#xff0c;或将新Edge连接到现有Wire。 BRepBuilderAPI_MakeWire 类将Edge连接到Wire。添加新Edge时&#xff0c;如果其顶点…

安卓OpenGL添加水印并录制(二)---抖音录制原理

文章目录 前文回顾音频处理留个小思考总结 本文首发地址 https://h89.cn/archives/146.html 最新更新地址 https://gitee.com/chenjim/chenjimblog 源码地址: Gitee: OpenGLRecorder 通过 前文 我们知道了如何采集 Camera 视频&#xff0c;叠加水印、贴纸保存为MP4&#xff0c;…

Vue3 学习笔记(Day1)

「写在前面」 本文为尚硅谷禹神 Vue3 教程的学习笔记。本着自己学习、分享他人的态度&#xff0c;分享学习笔记&#xff0c;希望能对大家有所帮助。 目录 0 课程介绍 1 Vue3 简介 2 创建 Vue3 工程 2.1 基于 vue-cli 创建 2.2 基于 vite 创建&#xff08;推荐&#xff09; 2.3 …

Web3探索加密世界:什么是空投?

随着加密货币行业的迅速发展&#xff0c;人们开始听说各种各样的术语&#xff0c;其中包括"空投"&#xff08;Airdrop&#xff09;。在这里&#xff0c;我们将深入探讨什么是空投&#xff0c;以及它在加密世界中扮演的角色。 什么是空投&#xff1f; 空投是指在加密…

视频生成模型:构建虚拟世界的模拟器 [译]

原文&#xff1a;Video generation models as world simulators 我们致力于在视频数据上开展生成模型的大规模训练。具体来说&#xff0c;我们针对不同时长、分辨率和宽高比的视频及图像&#xff0c;联合训练了基于文本条件的扩散模型。我们采用了一种 Transformer 架构&#…

C# OpenCvSharp DNN Image Retouching

目录 介绍 模型 项目 效果 代码 下载 C# OpenCvSharp DNN Image Retouching 介绍 github地址&#xff1a;https://github.com/hejingwenhejingwen/CSRNet (ECCV 2020) Conditional Sequential Modulation for Efficient Global Image Retouching 模型 Model Properti…

信号系统之连续信号处理

1 Delta 函数 连续信号可以分解为缩放和移位的增量函数&#xff0c;就像处理离散信号一样。不同之处在于&#xff0c;连续 delta 函数比其离散函数复杂得多&#xff0c;在数学上也抽象得多。我们不是用它是什么来定义连续 delta 函数&#xff0c;而是用它所具有的特征来定义它…

汽车电子论文学习---电动汽车用高功率密度碳化硅电机控制器研究

关键重点&#xff1a; sic的特点&#xff1a;耐压高、开关速度快、开关损耗小&#xff1b;采用sic的控制器&#xff0c;损耗降低70%&#xff0c;续航里程提高5%。sic的模块并联设计难度高于IGBT模块&#xff1b;多芯片并联导致热耦合问题、温升不均&#xff0c;导致部分芯片率…

猫毛过敏不能养猫了吗?除猫毛好的宠物空气净化器品牌有哪些?

让我们来探讨一下如何让容易过敏的家庭成员和猫咪更好地相处。很多人喜欢猫咪&#xff0c;但与它们相处一段时间后&#xff0c;可能会出现鼻塞、喷嚏和眼泪不断的过敏症状。那么&#xff0c;为什么会过敏呢&#xff1f;这是因为猫的唾液中含有Fel d1蛋白质&#xff0c;当它们舔…

匠芯创ArtInChip D133CBS芯片:为工业HMI产品提供强大动力与稳健防护的理想之选

引言 当今工业自动化领域&#xff0c;对于高性能和可靠性的需求日益增长。为了满足这些要求&#xff0c;匠芯创ArtInChip推出了全新的D133CBS芯片&#xff0c;它以其卓越的性能和强大的功能&#xff0c;被设计用作工业人机界面&#xff08;HMI&#xff09;产品的主控制器。 D1…

URL、DNS过滤,AV---防火墙综合实验

拓扑图 该实验之前的配置请看我的上一篇博客&#xff0c;这里仅配置URL、DNS过滤&#xff0c;AV 需求 8&#xff0c;分公司内部的客户端可以通过域名访问到内部的服务器 这次的拓扑图在外网多增加了一个DNS服务器和HTTP服务器 DNS服务器IP&#xff1a;40.0.0.30 HTTP服务器…

Java 位运算

基本概念 1、当前常见的 CPU 位数是 32 位和 64 位&#xff0c;所谓 32 位处理器就是一次只能处理 32 位&#xff0c;也就是 4 个字节的数据&#xff0c;而 64 位处理器一次则能处理 64 位&#xff0c;即 8 个字节的数据。关于 64 位处理器 、32 和 64 位含义 、32 和 64 位区…

如何创建WordPress付款表单(简单方法)

您是否正在寻找一种简单的方法来创建付款功能WordPress表单&#xff1f; 小企业主通常需要创建一种简单的方法来在其网站上接受付款&#xff0c;而无需设置复杂的购物车。简单的付款表格使您可以轻松接受自定义付款金额、设置定期付款并收集自定义详细信息。 在本文中&#x…

论文速递 | Operations Research 1月文章合集

​ 编者按 在本系列文章中&#xff0c;我们梳理了运筹学顶刊Operations Research在2024年1月份发布的7篇文章的基本信息&#xff0c;旨在帮助读者快速洞察领域新动态。 推荐文章1 ● 题目&#xff1a;Recovering Dantzig–Wolfe Bounds by Cutting Planes 通过切割平面恢复…

分销系统-分销小程序-多分销系统-

微信小程序分销返佣商城模式是一种基于微信小程序平台的新型商城销售模式。这种模式通过分销和返佣的方式&#xff0c;鼓励消费者成为分销商&#xff0c;并通过分享商品链接来提高销售效率和利润。 在分销返佣商城模式中&#xff0c;商家可以在小程序上发布商品信息&#xff0…

pclpy 安装和使用

pclpy 安装和使用 一、安装pclpy二、问题与解决方法三、测试四、测试结果五、相关链接 一、安装pclpy pclpy是点云库(PCL)的Python绑定。使用CppHeaderParser和pybind11从头文件生成。这个库正在积极开发中&#xff0c;目前Windows只支持python 3.6 x64 和 python3.7&#xff…

uniapp不同平台获取文件内容以及base64编码特征

前言 文件图片上传&#xff0c;客户端预览是很正常的需求&#xff0c;获取文件的md5特征码也是很正常的&#xff0c;那么&#xff0c;在uniapp中三种环境&#xff0c;h5, 小程序以及 app环境下&#xff0c;如何实现的&#xff1f; 参考&#xff1a; 如何在uniapp中读取文件Arr…