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

news2025/1/11 19:45:41

一百零五、如何创建 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.类似printf
    qDebug("%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);
    //创建一个label
    QLabel *lab1 = new QLabel;
    lab1->setParent(this);
    lab1->setText("我是一个标签");
    lab1->resize(200,100);
    lab1->setStyleSheet("background-color:red");//背景颜色

    //创建二个label
    QLabel *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_OBJECT

public:
    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);

    //左上角企鹅右边的QQ
    QLabel *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);
    //绑给lab3
    lab3->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.coloradmin.cn/o/1099974.html

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

相关文章

1688店铺商品接口:快速获取海量优质商品,一键批发采购!

获得1688店铺的所有商品接口&#xff0c;可以参考以下步骤&#xff1a; 进入1688网站&#xff0c;注册并登陆账号。进入目标店铺的详情页面&#xff0c;点击“API接口”选项。选择“item_search_shop”接口&#xff0c;点击“调用接口”按钮。在弹出的窗口中&#xff0c;将需要…

IOS课程笔记[4-5] 计算器实现与更换主题 的使用

计算 控件介绍 文本输入 设置键盘格式为NumberPad字符串与数字转换方法 NSInteger num2 [str2 integerValue]; 弹窗控件 UIAlertController 新版本弹窗 UIAlertController *alert [UIAlertController alertControllerWithTitle:"error" message:"输入有…

成都瀚网科技:抖店怎么快速出体验分?

在当今的移动互联网时代&#xff0c;电商平台之间的竞争日益激烈&#xff0c;用户对产品的体验变得越来越重要。在众多电商平台中&#xff0c;抖音电商成为备受关注的新兴力量。在抖店&#xff0c;如何快速提升店铺体验成为每个卖家关心的问题。 1.如何在抖店快速生成经验值&am…

docker容器内安装项目运行环境(python依赖包+allure)

目录 一、安装自动化项目依赖包1.导出项目依赖库2.上传到远程仓库3.进入jenkins容器内&#xff0c;检查是否安装git4.配置git用户信息5.生成秘钥6.把代码拉取下来7.安装python项目依赖8.运行项目 二、安装allure1.jenkins容器内安装allure&#xff0c;进入/usr/local/2.下载all…

3GPP相关

5G是指特定的、新的5G无线接入技术&#xff0c;在更宽泛的语境中&#xff0c;意指未来移动通信能够支持的、可预见的大量新的应用服务。 3GPP由3个技术规范组&#xff08;TSG&#xff09;组成&#xff0c;其中TSG RAN&#xff08;Radio Access Network&#xff0c;无线接入网&…

网工实验笔记:策略路由PBR的应用场景

一、概述 PBR&#xff08;Policy-Based Routing&#xff0c;策略路由&#xff09;&#xff1a;PBR使得网络设备不仅能够基于报文的目的IP地址进行数据转发&#xff0c;更能基于其他元素进行数据转发&#xff0c;例如源IP地址、源MAC地址、目的MAC地址、源端口号、目的端口号、…

ubunut搭建aarch64 cuda交叉编译环境记录

背景介绍 在windows环境下安装的VM虚拟机中配置的ubuntu系统,需要编译用于jetson xavier nx平台下可执行的程序,ubuntu 20.04系统为amd64架构,而jetson为arm,或者也叫aarch64架构。嵌入式平台jetson安装到设备中后不具备开发条件,需要在ubuntu系统中构建并编译好在jetson…

linux系统中日志简介

1.linux系统中日志文件类型 主要包括三种&#xff1a; 内核及系统日志 &#xff1a;主要由 系统服务 rsyslog统一管理&#xff0c;根据服务的主配置文件 /etc/rsyslog.conf 中的设置决定 内核和系统程序消息记录的位置。用户日志 &#xff1a; 记录linux系统中用户的登录和退出…

【计算机组成原理】第一章、计算机系统概述

思维导图 1.1计算机发展历程 1.1.1计算机硬件的发展 计算机系统硬件软件 计算机硬件的发展&#xff1a; 第一代&#xff1a;电子管第二代&#xff1a;晶体管第三代&#xff1a;小规模集成电路第四代&#xff1a;大规模集成电路 经历了4代&#xff0c;计算机的速度越来越快&…

GO-实现简单文本格式 文本字体颜色、大小、突出

毫无疑问GO的生态就是一坨大便。老子英文水平小学啊。 实现简单文本格式 文本字体颜色、大小、突出显示等。 创建要给docx文件容器【我估算的】 doc : document.New() defer doc.Close() doc.SaveToFile("simple.docx") 把容器保存为文件 设置标题 创建自然段…

浅谈估值模型:估值幻觉

1&#xff1a;本文是方正证券研报《如何打破“估值幻觉”》【1】的复现研究&#xff1b; 2&#xff1a;本文主要为理念的讲解&#xff0c;模型也是笔者自建&#xff0c;主要数据通过Tushare金融大数据平台接口获取&#xff0c;部分数据通过Wind金融终端获取&#xff1b; 3&am…

wps/word 如何让表格的标题和表格名称文本(表1-1 xxx)跨页显示(已解决)

第一步&#xff1a; 打开wps 创建一个跨页的表格表格&#xff0c;如下图 第二步 大家都知道 表格标题跨页 就是1&#xff09;在菜单表格工具 点击重复标题 或者 2&#xff09;表格属性--》行--》在各页顶端以标题行形式出现&#xff0c;详细如下图。 1&#xff09; 第一…

设计模式:简单工厂模式(C#、JAVA、JavaScript、C++、Python、Go、PHP):

简介&#xff1a; 简单工厂模式&#xff0c;它提供了一个用于创建对象的接口&#xff0c;但具体创建的对象类型可以在运行时决定。这种模式通常用于创建具有共同接口的对象&#xff0c;并且可以根据客户端代码中的参数或配置来选择要创建的具体对象类型。 在简单工厂模式中&am…

DVWA靶场Medium难度部分解析

前言 好久没做题&#xff0c;不想吹牛逼了&#xff0c;消停做点题QAQ Vulnerability: Command Injection 这题不咋难&#xff0c;老Ping题了 输个分号ls试试&#xff0c;没回显即被Ban了&#xff0c;试试别的&#xff0c;例如|或者&& 出了&#xff0c;看看源代码 把…

6.认识Java的API 使用Java函数库

2.1 分析bug SimpleDotCom类中的checkYourself()方法中的for循环有问题 每当玩家猜中某一格时&#xff0c;就将计数器加数&#xff0c;而不管之前是否就已经被猜中。需要一种机制来判别之前是否已经被猜中。 虚拟的行占有7个各自&#xff0c;而DotCom会占有其中连续的3格。下…

win10桌面便签小工具,安全无广告下载哪一款

很多人在日常生活中都有忘记处理事务的情况&#xff0c;偶然的一次两次可能自己就在当时懊恼一下&#xff0c;但是次数多了以后或者是涉及到处理重要的工作任务时&#xff0c;就会给大家带来心里负担及压力。 为避免大家在日常工作中忘记重要的事情&#xff0c;大家可以选择在…

el-table添加fixed属性后底部滚动条添加小手

0 效果 1 样式 /deep/ .el-table--scrollable-x {cursor: pointer; } /deep/ .el-table__empty-block {cursor: auto; } /deep/ .el-table__row {cursor: auto; }

3-k8s-镜像仓库harbor搭建

文章目录 一、概念二、安装harbor三、使用harbor仓库 一、概念 官方概念&#xff1a;Harbor是一个用于存储和分发Docker镜像的企业级Registry服务器。 我们平时拉去镜像都是从线上仓库拉去&#xff0c;但是企业内部的镜像一般都不会随意传到网上&#xff0c;而是保存在自己公…

Halo-Theme-Hao文档:如何设置导航栏?

本篇文章会教你如何配置导航栏&#xff0c;最终效果参考如下。 感谢 Lanbin、小孙同学 等同学的贡献&#xff08;语雀参与编辑&#xff09;。 1标题 进入站点后台 点击左侧面板中的 主题 点击上方的 导航 修改 标题字段即可 2主菜单 主菜单即网站导航栏中间部分的菜单 进入站点…

ChatGPT AIGC 实现多条件求和函数案例

从明细数据中,按多条件进行求和是职场办公应用活动经常要完成的事情。 像这样的需要我们完全可以不用自己动手去查相关函数的应用,让ChatGPT来完成就可以了。 Prompt:有一个Excel表格B3至B483为年份,C3至C483为商品名称,E3至E483为省份,F3至F483为销售额,请写出Excel函…