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.rhkb.cn/news/260800.html

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

相关文章

接了个任务:20个登录页设计,拿出N个压箱底的分享给大家。

Hello&#xff0c;我是贝格前端工场&#xff0c;最近接了任务&#xff1a;20个登录设计&#xff0c;B端系统登录页看似不起眼&#xff0c;但是最难设计&#xff0c;可以说是系统的门面&#xff0c;这期分享一批给打过过眼瘾&#xff08;无源文件&#xff09;。 B端系统登录页是…

文生图提示词:天气条件

天气和气候 --天气条件 Weather Conditions 涵盖了从基本的天气类型到复杂的气象现象&#xff0c;为描述不同的天气和气候条件提供了丰富的词汇。 Sunny 晴朗 Cloudy 多云 Overcast 阴天 Partly Cloudy 局部多云 Clear 清晰 Foggy 雾 Misty 薄雾 Hazy 朦胧 Rainy 下雨 Showers …

无心剑中译艾米·洛威尔《盛年》

Prime 盛年 Amy Lowell 艾米洛威尔 Your voice is like bells over roofs at dawn When a bird flies And the sky changes to a fresher color. 破晓&#xff0c;你的声音 宛如风铃飘过屋顶 鸟儿振翅飞走 天色变得更明净 Speak, speak, Beloved. Say little things For …

【Vuforia+Unity】AR02-长方体物体识别

1.创建模型 选择多维长方体图&#xff0c;这个长方体是生活中的真实物体的拍摄图&#xff0c;提前把6个面拍摄好并裁剪干净。 官网创建模型https://developer.vuforia.com/targetmanager/project/targets?projectId0ddbb5c17e7f4bf090834650bbea4995&avfalse 设置长宽高…

【51单片机】直流电机驱动(PWM)(江科大)

1.直流电机介绍 直流电机是一种将电能转换为机械能的装置。一般的直流电机有两个电极,当电极正接时,电机正转,当电极反接时,电机反转 直流电机主要由永磁体(定子)、线圈(转子)和换向器组成 除直流电机外,常见的电机还有步进电机、舵机、无刷电机、空心杯电机等 2.电机驱动…

java生成pdf

1.pdf预览 2.maven <!--pdf--><dependency><groupId>com.itextpdf</groupId><artifactId>itextpdf</artifactId><version>5.5.9</version></dependency><dependency><groupId>com.itextpdf</groupId>…

Linux小程序--进度条

目录 1.知识补充 1.1回车和换行 1.2缓冲区 2.实现倒计时 3.实现进度条 1.知识补充 1.在制作小程序进度条之前&#xff0c;我们先了解一下&#xff0c;回车换行和行缓冲区的概念。 2.动态效果&#xff0c;在同一个位置刷新不同的图像&#xff0c;实现一个倒计时的效果。…

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

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

基于JavaWeb开发的小区车辆登记系统计算机毕设[附源码]

基于JavaWeb开发的小区车辆登记系统计算机毕设[附源码] &#x1f345; 作者主页 央顺技术团队 &#x1f345; 欢迎点赞 &#x1f44d; 收藏 ⭐留言 &#x1f4dd; &#x1f345; 文末获取源码联系方式 &#x1f4dd; &#x1f345; 查看下方微信号获取联系方式 承接各种定制系统…

harmony 鸿蒙系统学习 安装ohpm报错 ohpm install failed

一. 安装配置 DevEco Studio 安装包时报错 execute ohpm install failed. Install task failed: ArkTS 3.2.12.5. Install ArkTS dependencies failed. 解决办法 找原因&#xff0c;首先&#xff0c;我的电脑中之前安装过node&#xff0c;也许是因为这个。&#xff08;其实…

【STM32 CubeMX】串口编程DMA+IDLE中断

文章目录 前言一、为什么要引入IDLE中断二、IDLE中断使用方式2.1 接收的三种情况2.2 函数的使用查询方式中断方式DMA方式分析一个问题 总结 前言 在嵌入式系统中&#xff0c;串口通信是一项关键的任务&#xff0c;而使用DMA&#xff08;直接内存访问&#xff09;结合IDLE中断进…

[经验] 玄殿社区qq堂4.2 #笔记#媒体

玄殿社区qq堂4.2 1、玄殿 玄殿&#xff0c;位于中国北京市的紫禁城内&#xff0c;是明清两代帝王祭天的场所。玄殿前殿为皇帝向神明祭拜的地方&#xff0c;中殿为祭天的主要场所&#xff0c;后殿为宋代遗址。玄殿规模庞大&#xff0c;身为中国传统建筑的代表之一&#xff0c;…

ubuntu分辨率更改、开机被重置、ubuntu屏幕小

ubuntu分辨率更改 分辨率改成&#xff1a;1920x1200 xrandr --size 1920x1200 在此之前可以先输入 xrandr 看支持哪些分辨率 开机被重置 我已经设置成这样了&#xff0c; 一开机变回这个 ubuntu屏幕小 输入命令行 xrandr --size 1920x1200 这个下次重启ubuntu又会重置…

yolov5转换成TensorRT推理过程笔记

笔记内容来自 B站 手写AI 一、用硬代码实现 GitHub - wang-xinyu/tensorrtx: Implementation of popular deep learning networks with TensorRT network definition API 安装python、cuda11.2、cudnn对应cuda11.2软件 1、在yolov5-master下训练完成后生成best.pt文件(训练时…

代码随想录刷题笔记-Day21

1. 二叉搜索树中的插入操作 701. 二叉搜索树中的插入操作https://leetcode.cn/problems/insert-into-a-binary-search-tree/给定二叉搜索树&#xff08;BST&#xff09;的根节点 root 和要插入树中的值 value &#xff0c;将值插入二叉搜索树。 返回插入后二叉搜索树的根节点。…

【面试题】谈谈MySQL的索引

索引是啥 可以把Mysql的索引看做是一本书的目录&#xff0c;当你需要快速查找某个章节在哪的时候&#xff0c;就可以利用目录&#xff0c;快速的得到某个章节的具体的页码。Mysql的索引就是为了提高查询的速度&#xff0c;但是降低了增删改的操作效率&#xff0c;也提高了空间…

springboot启动自动配置

1.自定义项命名启动类规范&#xff1a; 功能在前名字在后比如 aliyun-oss-spring-boot-starter starter表示启动 springboot版本需要2.7.5 2.创建springboot工程把该删除的文件删除 3.启动类 pom文件导入自定义配置类依赖 比如 <!--第2步--><!-- 启动类 pom…

数据结构--排序

数据结构--排序 1. 各类排序算法的性质2. 插入排序2.1 直接插入排序2.2 折半插入排序 3. 希尔排序4. 交换排序4.2 冒泡排序 5. 快速排序6. 选择排序6.1 简单选择排序6.2 堆排序 7. 归并排序8. 基数排序 1. 各类排序算法的性质 2. 插入排序 2.1 直接插入排序 2.2 折半插入排序 …

左右联动布局效果

效果图&#xff1a; <template><el-dialog :modelValue"modelValue" :before-close"close" fullscreen :close-on-click-modal"false"><div class"farmer_detail"><div class"info_content"><di…