嵌入式养成计划-42----QT 创建项目--窗口界面--常用类及组件

一百零五、如何创建 QT 项目

  1. 创建工程 +New Project / 文件–>新建。。 /ctrl +N
    在这里插入图片描述

  2. 选择一个模板–>Application -->Qt Widgets Application
    在这里插入图片描述

  3. 选择创建的路径,以及设置文件名
    在这里插入图片描述

  4. 下一步
    在这里插入图片描述

  5. 输入类名,选择基类为 QWidget
    在这里插入图片描述

  6. 下一步
    在这里插入图片描述

  7. 选择这个玩意,然后下一步(如果没有这个选项,那就是安装的时候没装好,建议卸载重装)
    在这里插入图片描述

  8. 完成创建
    在这里插入图片描述

一百零六、一个项目中的文件介绍

106.1 main.cpp 主函数

#include "mywidget.h" //我的窗口的头文件
#include <QApplication>  //包含应用程序类的头文件//主函数    argc命令行变量的个数   agrv命令行变量列表
int main(int argc, char *argv[])
{//应用程序类实例化一个a对象  a对象有且仅有一个QApplication a(argc, argv);//我的窗口的对象MyWidget w;//窗口默认不显示,需要调用show显示w.show();//让应用程序类的对象 进入消息循环,==阻塞return a.exec();
}

106.2 xxx.h 接口头文件

//防止头文件重复包含
#ifndef MYWIDGET_H
#define MYWIDGET_H#include <QWidget>class MyWidget : public QWidget //封装自己窗口的类 共有继承于QWidget
{Q_OBJECT  //宏  用于信号和槽public:MyWidget(QWidget *parent = nullptr); //构造函数~MyWidget(); //析构函数
};
#endif // MYWIDGET_H

106.3 xxx.cpp 接口的实现

#include "mywidget.h" //包含头文件//构造函数实现
MyWidget::MyWidget(QWidget *parent): QWidget(parent) //用初始化列表 给父类成员初始化
{
}
//析构函数实现
MyWidget::~MyWidget()
{
}
//其他接口函数实现
······

106.4 Qt中信息调试类(输出类) QDebug的使用

  • 可在构造函数中写这些
MyWidget::MyWidget(QWidget *parent): QWidget(parent) //用初始化列表 给父类成员初始化
{//1.类似printfqDebug("%s", "hello world");//2.类似cout 默认换行qDebug() << "hello kitty" ;//3.qt的字符串类型用QString类,其中有个成员函数arg比较厉害//QString s = QString("%1, %2, %3").arg(100).arg(200).arg(300);qDebug() << QString("%1, %2, %3").arg(100).arg(200).arg(300);
}

一百零七、对窗口界面的相关设置

107.1 求出当前窗口的尺寸

qDebug() << this->size();				//窗口的宽和高
qDebug() << this->geometry().size();	//通过几何图像 输出宽和高
qDebug() << this->size().width();		//..宽
qDebug() << this->size().height();		//..高
qDebug() << this->width();
qDebug() << this->height();

107.2 窗口的尺寸、标题、背景色等设置

//重新设置窗口的大小
this->resize(530, 410);//设置窗口标题
this->setWindowTitle("我的窗口");//设置窗口图标
this->setWindowIcon(QIcon("C:\\Users\\admin\\Desktop\\pictrue\\qq.png"));//设置纯净窗口,去掉头部
this->setWindowFlag(Qt::FramelessWindowHint);//设置窗口背景颜色
this->setStyleSheet("background-color:white");

一百零八、常用类及组件的使用

108.1 按钮类 QPushButton

  • 按钮
#include "mywidget.h"
MyWidget::MyWidget(QWidget *parent): QWidget(parent)
{//创建第一个按钮, 使用无参构造QPushButton *btn1 = new QPushButton;btn1->setText("第一个按钮"); //设置按钮文本//btn1->show();btn1->setParent(this); //指定父对象(父组件),可以依赖父对象显示,可以不用管它的释放操作btn1->setStyleSheet("background-color:pink");btn1->setIcon(QIcon("C:\\Users\\admin\\Desktop\\pictrue\\qq.png"));btn1->setEnabled(false); //设置不可用状态//创建第二个按钮QPushButton *btn2 = new QPushButton(this); //创建对象时,指向父对象btn2->setText("第二个按钮");btn2->move(200,0);//创建第三个按钮QPushButton *btn3 = new QPushButton("第三个按钮",this);btn3->move(300,200);//创建第四个按钮QPushButton *btn4 = new QPushButton(QIcon("C:\\Users\\admin\\Desktop\\pictrue\\qq.png"),"第四个按钮",this);btn4->move(300,300);
}
MyWidget::~MyWidget()
{
}

108.2 行编辑器类(QLineEdit)

  • 输入框
MyWidget::MyWidget(QWidget *parent): QWidget(parent)
{//创建第一个行编辑器QLineEdit *ed1 = new QLineEdit; //无参构造ed1->setParent(this);ed1->move(300,0);ed1->setEchoMode(QLineEdit::Password); //设置密码//创建第二行编辑器QLineEdit *ed2 = new QLineEdit("张三",this); //默认文本ed2->setEnabled(false);//创建第三个行编辑器QLineEdit *ed3 = new QLineEdit(this);ed3->move(200,100);ed3->setPlaceholderText("姓名"); //设置占位
}

108.3 标签类(Qlabel)

  • 一般显示文本或者图片用的
MyWidget::MyWidget(QWidget *parent): QWidget(parent)
{this->resize(600,400);//创建一个labelQLabel *lab1 = new QLabel;lab1->setParent(this);lab1->setText("我是一个标签");lab1->resize(200,100);lab1->setStyleSheet("background-color:red");//背景颜色//创建二个labelQLabel *lab2 = new QLabel(this);lab2->move(200,200);lab2->resize(100,100);//重新设置大小//设置图片lab2->setPixmap(QPixmap("C:\\Users\\admin\\Desktop\\pictrue\\logo.png"));//让图片自动使用标签lab2->setScaledContents(true);
}

小作业

  • 模拟一个 QQ 的登录界面

我写的

在这里插入图片描述

代码 :

main.cpp

  • 没动,生成啥样就还是啥样
#include "qq_login.h"
#include <QApplication>int main(int argc, char *argv[])
{QApplication a(argc, argv);qq_login w;w.show();return a.exec();
}

qq_login.h

#ifndef QQ_LOGIN_H
#define QQ_LOGIN_H#include <QWidget>
#include <QIcon>
#include <QPushButton>
#include <QLineEdit>
#include <QLabel>
#include <QPainter>
#include<QCheckBox>class qq_login : public QWidget
{Q_OBJECTpublic:qq_login(QWidget *parent = nullptr);~qq_login();
};#endif // QQ_LOGIN_H

qq_login.cpp

#include "qq_login.h"qq_login::qq_login(QWidget *parent): QWidget(parent)
{this->resize(536,410);//取消窗口头部this->setWindowFlag(Qt::FramelessWindowHint);//设置窗口背景颜色this->setStyleSheet("background-color:white");//设置窗口标题this->setWindowTitle("QQ");//窗口上半部分的图QLabel *lab1 = new QLabel(this);//选择图形lab1->setPixmap(QPixmap("C:\\Users\\zhk\\Desktop\\qq_login.gif"));//设置图形尺寸lab1->resize(536,156);//左上角的企鹅QLabel *lab2 = new QLabel(this);//选择图片lab2->setPixmap(QPixmap("C:\\Users\\zhk\\Desktop\\qie.png"));//设置尺寸lab2->resize(36,39);//基于左上角移动位置lab2->move(10,15);//设置自动适应标签lab2->setScaledContents(true);//设置背景颜色lab2->setStyleSheet("background-color:rgb(49,164,241)");//设置窗口透明度lab2->setWindowOpacity(0.3);//左上角企鹅右边的QQQLabel *lab3 = new QLabel("QQ",lab1);//基于左上角移动位置lab3->move(47,15);//设置尺寸lab3->resize(45,39);//设置自动适应标签lab3->setScaledContents(true);//设置背景颜色lab3->setStyleSheet("background-color:rgb(49,164,241)");//调整QQ俩字母的字体QFont ft;//调成16号大小ft.setPointSize(16);//绑给lab3lab3->setFont(ft);//QQ号输入框前面的图标QLabel *lab4 = new QLabel(this);//找图片lab4->setPixmap(QPixmap("C:\\Users\\zhk\\Desktop\\pictrue\\wodepeizhenshi.png"));//设置尺寸lab4->resize(25,25);//基于左上角移动位置lab4->move(123,216);//设置自动适应标签lab4->setScaledContents(true);//密码前面的图标QLabel *lab5 = new QLabel(this);//找图片lab5->setPixmap(QPixmap("C:\\Users\\zhk\\Desktop\\pictrue\\passwd.jpg"));//设置尺寸lab5->resize(25,25);//基于左上角移动位置lab5->move(123,250);//设置自动适应标签lab5->setScaledContents(true);//QQ号行编辑器QLineEdit *qq_num = new QLineEdit(this);//设置尺寸qq_num->resize(270,30);//基于左上角移动位置qq_num->move(150,215);//密码行编辑器QLineEdit *passwd = new QLineEdit(this);//设置尺寸passwd->resize(270,30);//基于左上角移动位置passwd->move(150,245);//设置输入模式为密码输入模式passwd->setEchoMode(QLineEdit::Password);//自动登录QLabel *lab6 = new QLabel("自动登录",this);//设置尺寸lab6->resize(65,20);//基于左上角移动位置lab6->move(145,307);//自动登录前面的选择框QCheckBox*box1 = new QCheckBox("Checkbox1", this);//设为默认选中box1->setChecked(true);//基于左上角移动位置box1->move(125, 307);//设置尺寸box1->resize(21, 20);//记住密码QLabel *lab7 = new QLabel("记住密码",this);//设置尺寸lab7->resize(65,20);//基于左上角移动位置lab7->move(260,307);//记住密码前面的选择框QCheckBox *box2 = new QCheckBox("Checkbox2", this);//设为默认选中box2->setChecked(true);//基于左上角移动位置box2->move(242, 307);//设置尺寸box2->resize(21, 20);//找回密码QLabel *lab8 = new QLabel("找回密码",this);//设置尺寸lab8->resize(65,20);//基于左上角移动位置lab8->move(356,307);//注册账号QLabel *lab9 = new QLabel("注册账号",this);//设置尺寸lab9->resize(65,20);//基于左上角移动位置lab9->move(14,381);//登录按键QPushButton *btn = new QPushButton("登录",this);//设置尺寸btn->resize(297,44);//基于左上角移动位置btn->move(124,342);//设置按钮的背景色和柔化程度btn->setStyleSheet("background-color:rgb(7,188,252);border-radius:3");//右下角的二维码QLabel *lab10 = new QLabel(this);//找图片lab10->setPixmap(QPixmap("C:\\Users\\zhk\\Desktop\\eweima.png"));//设置尺寸lab10->resize(30,30);//基于左上角移动位置lab10->move(492,367);//设置自动适应标签lab10->setScaledContents(true);//中间的头像QLabel *lab11 = new QLabel(this);//设置尺寸lab11->resize(85,85);//找图片lab11->setPixmap(QPixmap("C:\\Users\\zhk\\AppData\\Roaming\\Tencent\\QQ\\Misc\\GenIcons\\b592921469.ico"));//基于左上角移动位置lab11->move(230,110);//设置自动适应标签lab11->setScaledContents(true);//柔化到极致,就成了圆了lab11->setStyleSheet("border-radius:42px");
}qq_login::~qq_login()
{
}

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

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

相关文章

2020年亚太杯APMCM数学建模大赛A题激光标记舱口轮廓生成求解全过程文档及程序

2020年亚太杯APMCM数学建模大赛 A题 激光标记舱口轮廓生成 原题再现&#xff1a; 激光是20中的一项重要发明世纪&#xff0c;它被称为“最锋利的刀”、“最精确的尺子”和“最不寻常的光”。 激光已越来越多地应用于工业加工&#xff0c; 其中可以是就业在各种加工业务例如作…

凉鞋的 Godot 笔记 203. 变量的常用类型

203. 变量的常用类型 在上一篇&#xff0c;我们对变量进行了概述和简介&#xff0c;知识地图如下&#xff1a; 我们已经接触了&#xff0c;变量的字符串类型&#xff0c;以及一些功能。 在这一篇&#xff0c;我们尝试多接触一些变量的类型。 首先是整数类型。 整数类型 整…

Vue解决 npm -v 报错(一)

报错内容&#xff1a; npm WARN config global --global, --local are deprecated. Use --locationglobal instead. 解决方案&#xff1a; 代码&#xff1a; prefix -g 替换为&#xff1a; prefix --locationglobal 原创作者&#xff1a;吴小糖 创作时间&#xff1a;2023.1…

redis部署与管理

一、关系数据库与非关系型数据库&#xff1a; 1. 关系型数据库&#xff1a; 关系型数据库是一个结构化的数据库&#xff0c;创建在关系模型&#xff08;二维表格模型&#xff09;基础上&#xff0c;一般面向于记录。 SQL 语句&#xff08;标准数据查询语言&#xff09;就是一种…

【异步爬虫】requests和aiohttp中代理IP的使用

前言 在进行爬虫开发时&#xff0c;我们常常需要使用代理IP来隐藏自己的真实IP地址&#xff0c;以避免被一些网站限制或封禁。requests和aiohttp是两个非常常用的工具&#xff0c;本文将分别介绍如何在它们中使用代理IP&#xff0c;希望可以帮助大家更好地进行异步爬虫开发。 …

天鹰340亿(AquilaChat2-34B-16K)本地部署的解决方案

大家好,我是herosunly。985院校硕士毕业,现担任算法研究员一职,热衷于机器学习算法研究与应用。曾获得阿里云天池比赛第一名,CCF比赛第二名,科大讯飞比赛第三名。拥有多项发明专利。对机器学习和深度学习拥有自己独到的见解。曾经辅导过若干个非计算机专业的学生进入到算法…

51单片机仿真软件 Proteus 8 Pro 安装步骤

51单片机仿真软件 Proteus 8 Pro 安装步骤 学习 51 单片机的时候&#xff0c;如果手头没有开发板&#xff0c;可以使用仿真软件 Proteus。Proteus 可以仿真 51 单片机及周边元器件&#xff08;例&#xff1a; LED&#xff09; 的运行情况。 可以简单认为&#xff1a;Proteus …

Windows Server服务器下的Linux子系统

Windows、Linux看似死敌一对&#xff0c;但其实微软对于开源实业还是相当支持的&#xff0c;Windows 10系统内就首次内置了一个Linux子系统(Windows Subsystem for Linux/WSL)&#xff0c;允许开发者模拟Linux环境&#xff0c;而且有需要的可以直接从Windows应用商店下载SUSE、…

《数据结构、算法与应用C++语言描述》使用C++语言实现数组双端队列

《数据结构、算法与应用C语言描述》使用C语言实现数组双端队列 定义 队列的定义 队列&#xff08;queue&#xff09;是一个线性表&#xff0c;其插入和删除操作分别在表的不同端进行。插入元素的那一端称为队尾&#xff08;back或rear&#xff09;&#xff0c;删除元素的那一…

web前端面试-- 手写原生Javascript方法(new、Object.create)

web面试题 本人是一个web前端开发工程师&#xff0c;主要是vue框架&#xff0c;整理了一些面试题&#xff0c;今后也会一直更新&#xff0c;有好题目的同学欢迎评论区分享 ;-&#xff09; web面试题专栏&#xff1a;点击此处 手动实现Object.create 通过Object.create&#…

C/C++面试常见问题——指针和引用的区别

首先想要理解指针和引用的区别&#xff0c;我们要明确什么是指针&#xff0c;什么是引用 一&#xff0c;指针和引用的基本概念及特性 指针是一个特殊变量&#xff0c;其中存储着所指向变量的地址 指针主要有以下特性&#xff1a; 1. 在使用时需要*解引用 2. sizeof(指针)的…

STM32MP135和STM32MP157的区别

本文介绍了STMicroelectronics公司推出的两款多核处理器STM32MP135和STM32MP157之间的区别&#xff0c;包括主频、集成硬件模块数量、内存大小和电压调节模块等方面。 STMicroelectronics是一家领先的半导体解决方案提供商&#xff0c;在嵌入式系统领域有着丰富的经验。他们…

程序连接oracle查询数据的环境配置

连接oracle 数据库真麻烦&#xff0c;还是MySQL方便 Oracle Instant Client 这个东西的版本跟oracle的版本是有讲究的&#xff0c;引用文档的说明 Oracle 标准的客户端-服务器网络互操作性允许不同版本的 Oracle 客户端和 Oracle 数据库之间的连接。有关经过认证的配置&#…

JUC并发编程——各种锁的理解(基于狂神说的学习笔记)

各种锁的理解 公平锁与非公平锁 公平锁&#xff1a;非常公平&#xff0c;不能够插队&#xff0c;先来后到 非公平锁&#xff1a;可以插队&#xff0c;比较灵活&#xff08;默认都是非公平&#xff0c;如&#xff1a;synchronized,lock&#xff09; // Lock lock new Reent…

学习c#桌面应用编程 --- 我的第一个游戏

场景 我需要做一个c#桌面窗口软件&#xff0c;但是我曾经都是专职于java开发&#xff0c;但是java对windows并不是特别友好(awt除外)&#xff0c;于是必须需要掌握c#桌面编程&#xff0c;所以我需要手动做一个小游戏&#xff0c;来学习c#的一些基本桌面应用的知识。 开始 这…

Leetcode 剑指 Offer II 049. 求根节点到叶节点数字之和

题目难度: 中等 原题链接 今天继续更新 Leetcode 的剑指 Offer&#xff08;专项突击版&#xff09;系列, 大家在公众号 算法精选 里回复 剑指offer2 就能看到该系列当前连载的所有文章了, 记得关注哦~ 题目描述 给定一个二叉树的根节点 root &#xff0c;树中每个节点都存放有…

vue3后台管理系统之路由守卫

下载进度条 pnpm install nprogress //路由鉴权:鉴权,项目当中路由能不能被的权限的设置(某一个路由什么条件下可以访问、什么条件下不可以访问) import router from /router import setting from ./setting // eslint-disable-next-line typescript-eslint/ban-ts-comment /…

FreeRTOS入门教程(事件组概念和函数使用)

文章目录 前言一、事件组概念二、事件组和信号量&#xff0c;队列的区别三、事件组相关函数三、事件组应用示例1.等待多个事件2.任务同步 总结 前言 本篇文章将带大家学习什么是事件组以及如何使用事件组。 一、事件组概念 事件组通常是由一组位&#xff08;bits&#xff09…

Linux下的命令行参数和环境变量

命令行参数 什么是命令行参数 命令行参数是指在执行命令行程序时&#xff0c;给程序传递的额外参数。在Linux终端中&#xff0c;命令行参数通常通过在命令后面添加空格分隔的参数来传递。 Linux下以main函数举例说明 #include<stdio.h>int main(int argc char* argv[])…

Java:ApacheHttpClient连接寿命(timeToLive)未配置问题分析

一、问题描述 若 Apache HttpClient 未设置 timeToLive&#xff0c;通过服务域名访问服务的实例并且服务域名解析出的 IP 发生变化时&#xff0c;在短时间内会有部分请求出现连接异常错误。 二、问题分析 Apache HttpClient 通过服务域名从连接池获取连接&#xff0c;当连接…