2.20 Qt day1

2024-02-21 14:44
文章标签 qt day1 2.20

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

这篇关于2.20 Qt day1的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/732139

相关文章

嵌入式QT开发:构建高效智能的嵌入式系统

摘要: 本文深入探讨了嵌入式 QT 相关的各个方面。从 QT 框架的基础架构和核心概念出发,详细阐述了其在嵌入式环境中的优势与特点。文中分析了嵌入式 QT 的开发环境搭建过程,包括交叉编译工具链的配置等关键步骤。进一步探讨了嵌入式 QT 的界面设计与开发,涵盖了从基本控件的使用到复杂界面布局的构建。同时也深入研究了信号与槽机制在嵌入式系统中的应用,以及嵌入式 QT 与硬件设备的交互,包括输入输出设

【QT】基础入门学习

文章目录 浅析Qt应用程序的主函数使用qDebug()函数常用快捷键Qt 编码风格信号槽连接模型实现方案 信号和槽的工作机制Qt对象树机制 浅析Qt应用程序的主函数 #include "mywindow.h"#include <QApplication>// 程序的入口int main(int argc, char *argv[]){// argc是命令行参数个数,argv是

Python QT实现A-star寻路算法

目录 1、界面使用方法 2、注意事项 3、补充说明 用Qt5搭建一个图形化测试寻路算法的测试环境。 1、界面使用方法 设定起点: 鼠标左键双击,设定红色的起点。左键双击设定起点,用红色标记。 设定终点: 鼠标右键双击,设定蓝色的终点。右键双击设定终点,用蓝色标记。 设置障碍点: 鼠标左键或者右键按着不放,拖动可以设置黑色的障碍点。按住左键或右键并拖动,设置一系列黑色障碍点

使用Qt编程QtNetwork无法使用

使用 VS 构建 Qt 项目时 QtNetwork 无法使用的问题 - 摘叶飞镖 - 博客园 (cnblogs.com) 另外,强烈建议在使用QNetworkAccessManager之前看看这篇文章: Qt 之 QNetworkAccessManager踏坑记录-CSDN博客 C++ Qt开发:QNetworkAccessManager网络接口组件 阅读目录 1.1 通用API函数

Qt多语种开发教程

Qt作为跨平台的开发工具,早已应用到各行各业的软件开发中。 今天讲讲,Qt开发的正序怎么做多语言开发。就是说,你设置中文,就中文显示;设置英语就英文显示,设置繁体就繁体显示,设置发育就显示法语等。 开发环境(其实多语种这块根环境没太大关系):win10,Qt.5.12.10 一.先用QtCreator创建一个简单的桌面程序 1.工程就随便命名“LanguageTest”,其他默认。 2.在设计师

Qt中window frame的影响

window frame 在创建图形化界面的时候,会创建窗口主体,上面会多出一条,周围多次一圈细边,这就叫window frame窗口框架,这是操作系统自带的。 这个对geometry的一些属性有一定影响,主要体现在Qt坐标系体系: 窗口当中包含一个按钮,这个按钮的坐标系是以父元素为参考,那么这个参考是widget本体作为参考,还是window frame作为参考,这两种参考体系都存在

【Qt】定时器事件

定时器事件 在之前学习QTimer中实现了定时器的功能,而在QTimer背后是QTimerEvent定时器事件进行支撑的。在QObject中提供了一个timeEvent这个函数。 startTimer启动定时器killTimer关闭定时器 Qt 中在进⾏窗⼝程序的处理过程中,经常要周期性的执⾏某些操作,或者制作⼀些动画效果,使⽤定 时器就可以实现。所谓定时器就是在间隔⼀定时间后,去执⾏某⼀

QT 编译报错:C3861: ‘tr‘ identifier not found

问题: QT 编译报错:C3861: ‘tr’ identifier not found 原因 使用tr的地方所在的类没有继承自 QObject 类 或者在不在某一类中, 解决方案 就直接用类名引用 :QObject::tr( )

在 Qt Creator 中,输入 /** 并按下Enter可以自动生成 Doxygen 风格的注释

在 Qt Creator 中,当你输入 /** 时,确实会自动补全标准的 Doxygen 风格注释。这是因为 Qt Creator 支持 Doxygen 以及类似的文档注释风格,并且提供了代码自动补全功能。 以下是如何在 Qt Creator 中使用和显示这些注释标记的步骤: 1. 自动补全 Doxygen 风格注释 在 Qt Creator 中,你可以这样操作: 在你的代码中,将光标放在

Qt: 详细理解delete与deleteLater (避免访问悬空指针导致程序异常终止)

前言 珍爱生命,远离悬空指针。 正文 delete 立即删除:调用 delete 后,对象会立即被销毁,其内存会立即被释放。调用顺序:对象的析构函数会被立即调用,销毁该对象及其子对象。无事件处理:如果在对象销毁过程中还涉及到信号和槽、事件处理等,直接 delete 可能会导致问题,尤其是在对象正在处理事件时。适用场景:适用于在确定对象已经不再被使用的情况下,并且不涉及异步处理或事件循环中的