2.20 Qt day1

一. 思维导图

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

按钮类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)。在运行时,根据对象的实际类型(动态绑定),调用相应的函数实现。这种机制使得我们可以通过基类指针或引用来调用派生类中的函数,实现多态。

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

ts快速入门

文章目录 一、运行环境1、线上Playground2、VSCode 编辑器3、Code Runner 插件4、ts-node 二、声明1、变量声明2、常量声明3、类型推断 三、常用数据类型1、number2、string3、boolean4、数组5、对象 四、函数1、函数声明语法2、参数详解&#xff08;1&#xff09;特殊语法&…

C++学习Day08之类模板碰到继承的问题以及解决

目录 一、程序及输出1.1 指定父类T数据类型1.2 子类T指定父类T数据类型 二、分析与总结 一、程序及输出 1.1 指定父类T数据类型 必须要指定出父类中的T数据类型&#xff0c;才能给子类分配内存 正确使用 &#xff1a; #include<iostream> using namespace std;templa…

webpack打包速度优化思维导图

webpack打包速度优化思维导图 前言附件 前言 去年的时候公司一个项目体积过大&#xff0c;我是m1芯片的macpro&#xff0c;光启动就要1分钟&#xff0c;配置差点都电脑&#xff0c;启动就要3分钟&#xff0c;自然打包速度也会慢很多&#xff0c;我们是gitlab设置成了自动打包的…

春招面试准备笔记——NMS(非极大值抑制)算法

NMS&#xff08;非极大值抑制&#xff09;算法非极大值抑制是用于减少物体检测算法中重叠边界框或区域的数量的技术。通过对每个类别的检测框按置信度排序&#xff0c;然后逐个遍历&#xff0c;保留置信度最高的框&#xff0c;并抑制与其重叠且置信度低的框&#xff0c;从而得到…

Apache Httpd 常见漏洞解析(全)

一、Apache HTTPD 换行解析漏洞 漏洞编号&#xff1a;CVE-2017-15715 Apache HTTPD是一款HTTP服务器&#xff0c;它可以通过mod_php来运行PHP网页。 其2.4.0~2.4.29版本中存在一个解析漏洞。 在解析PHP时&#xff0c;1.php\x0A将被按照PHP后缀进行解析&#xff0c;导致绕过…

桌面备忘录怎么设置,怎么在电脑上设置提醒?

桌面备忘录怎么设置&#xff0c;怎么在电脑上设置提醒&#xff1f;如今&#xff0c;为了优质生活的需要&#xff0c;我们每天都会处理很多的事情&#xff0c;比如&#xff1a;网课时间、工作任务、生活琐事……有时候&#xff0c;真恨不得自己有个三头六臂&#xff0c;好把这一…

前端|JavaScript 基础 - 第2天(黑马笔记)

JavaScript 基础 - 第2天 目录 JavaScript 基础 - 第2天一、运算符1.算术运算符2.赋值运算符3.自增/自减运算符4.比较运算符5.逻辑运算符6.运算符优先级 二、语句1.表达式和语句2.分支语句if 分支语句if双分支语句if 多分支语句三元运算符&#xff08;三元表达式&#xff09;sw…

分治算法总结(Java)

目录 分治算法概述 快速排序 练习1&#xff1a;排序数组 练习2&#xff1a;数组中的第K个最大元素 练习3&#xff1a;最小k个数 归并排序 练习4&#xff1a;排序数组 练习5&#xff1a;交易逆序对的总数 练习6&#xff1a;计算右侧小于当前元素的个数 练习7&#xff1…

视频推拉流EasyDSS视频直播点播平台授权出现激活码无效并报错400是什么原因?

视频推拉流EasyDSS视频直播点播平台集视频直播、点播、转码、管理、录像、检索、时移回看等功能于一体&#xff0c;可提供音视频采集、视频推拉流、播放H.265编码视频、存储、分发等视频能力服务&#xff0c;在应用场景上&#xff0c;平台可以运用在互联网教育、在线课堂、游戏…

Project_Euler-06 题解

Project_Euler-06 题解 题目描述 两个公式 等差数列求和公式 i i i项&#xff1a; a i a_{i} ai​ 项数&#xff1a; n n n 公差&#xff1a; d d d 和&#xff1a; S n S_{n} Sn​ a n a 1 ( n − 1 ) d S n n ( a 1 a n ) 2 a_{n} a_{1} (n - 1)d\\ S_{n} \frac{n(a_…

在哪些领域中最需要使用 OCR 识别技术?真实场景介绍

根据我们的项目经验总结来说&#xff0c;OCR&#xff08;光学字符识别&#xff09;技术在多个领域中扮演着至关重要的角色&#xff0c;它能够将图像中的文本内容转换为机器可读的格式&#xff0c;极大地提高了数据处理的效率和准确性。以下是一些主要领域及其对应的应用场景和用…

ubuntu22.04@laptop OpenCV Get Started: 012_mouse_and_trackbar

ubuntu22.04laptop OpenCV Get Started: 012_mouse_and_trackbar 1. 源由2. mouse/trackbar应用Demo2.1 C应用Demo2.2 Python应用Demo 3. 鼠标位置跟踪注释3.1 注册回调函数3.2 回调操作3.3 效果 4. 使用轨迹栏调整图像大小4.1 初始化轨迹栏&注册回调函数4.2 回调操作4.3 效…

每期十万,等你来战|AI原生应用开发挑战赛首期精彩回顾

随着大模型技术的飞速发展&#xff0c;2024年将会成为AI原生应用爆发的元年&#xff0c;引领千行百业的创新变革。在这一时代背景下&#xff0c;百度智能云重磅推出千帆杯AI原生应用开发挑战赛&#xff0c;旨在激发广大开发者的创意潜能&#xff0c;推动AI原生应用在中国市场的…

16:00面试,16:09就出来了 ,问的实在是太...

从外包出来&#xff0c;没想到算法死在另一家厂子 自从加入这家公司&#xff0c;每天都在加班&#xff0c;钱倒是给的不少&#xff0c;所以也就忍了。没想到8月一纸通知&#xff0c;所有人不许加班&#xff0c;薪资直降30%&#xff0c;顿时有吃不起饭的赶脚。 好在有个兄弟内…

STM32 TIM2重映射

STM32定时器 文章目录 STM32定时器[TOC](文章目录) 前言一、问题分析二、代码 前言 最近想弄一个多路输出PWM&#xff0c;但是发现TIM2不能用&#xff0c;根据手册也对它进行重映射了&#xff0c;但是还是不能用&#xff0c;用示波器发现驱动能力比较弱&#xff0c;然后禁用jt…

羊大师讲解,羊奶奶源是如何影响羊奶品质的呢?

羊大师讲解&#xff0c;羊奶奶源是如何影响羊奶品质的呢&#xff1f; 1.营养成分和口感&#xff1a;由于奶源地的不同&#xff0c;土壤、气候和牧草种类等自然条件的差异会导致羊奶的营养成分和口感有所差异。高品质的奶源地能够提供丰富的营养和优质的牧草&#xff0c;因此羊…

wo-gradient-card是一款采用uniapp实现的透明辉光动画卡片

采用uniapp-vue3实现&#xff0c;透明辉光动画卡片&#xff0c;卡片内容包含标签、标题、副标题、图片 支持H5、微信小程序&#xff08;其他小程序未测试过&#xff0c;可自行尝试&#xff09; 可用于参考学习 可到插件市场下载尝试&#xff1a; https://ext.dcloud.net.cn/plu…

刷LeetCode541引起的java数组和字符串的转换问题

起因是今天在刷下面这个力扣题时的一个报错 541. 反转字符串 II - 力扣&#xff08;LeetCode&#xff09; 这个题目本身是比较简单的&#xff0c;所以就不讲具体思路了。问题出在最后方法的返回值处&#xff0c;要将字符数组转化为字符串&#xff0c;第一次写的时候也没思考直…

VIO第3讲:基于优化的IMU与视觉信息融合之IMU预积分

VIO第3讲&#xff1a;基于优化的IMU与视觉信息融合之IMU预积分 文章目录 VIO第3讲&#xff1a;基于优化的IMU与视觉信息融合之IMU预积分1 IMU预积分1.1 IMU常规积分—连续时间—不适用1.2 预积分形式① 定义② 如何推导出预积分定义③ 用预积分表达IMU积分公式④ 预积分误差&am…

APP要做哪些测试?APP测试要注意哪些问题?

APP要做哪些测试&#xff1f;APP测试要注意哪些问题&#xff1f;对于移动测试&#xff0c;测试员不得不基于用户移动使用模式考虑移动相关的功能。而针对手机应用软件APP的系统测试&#xff0c;我们通常从如下几个角度开展&#xff1a;功能测试(流程测试、功能点测试)、兼容性测…