QT的工程文件认识

目录

1、QT介绍

2、QT的特点

3、QT模块

3.1基本模块

3.2扩展模块

4、QT工程创建

1.选择应用的窗体格式

2.设置工程的名称与路径

3.设置类名

4.选择编译器

5、QT 工程解析

xxx.pro 工程配置

xxx.h 头文件

main.cpp 主函数

xxx.cpp 文件

6、纯手工创建一个QT 工程

1.创建一个纯C++ 工程

2.在xxx.pro 添加模块

3.设计界面代码

7、UI文件设计界面


1、QT介绍

百度百科的解释:

Qt [1] 是一个1991年由Qt Company开发的跨平台C++图形用户界面应用程序开发框架。它既可以开发GUI程序,也可用于开发非GUI程序,比如控制台工具和服务器。Qt是面向对象的框架,使用特殊的代码生成扩展(称为元对象编译器(Meta Object Compiler, moc))以及一些宏,Qt很容易扩展,并且允许真正地组件编程。

简单理解:QT 就是使用C++ 封装的一个图形界面库。

QT是通用的C++开发界面框架( C++ 图形用户界面 应用程序开发框架。)它既可以开发GUI程序,也可用于开发非GUI程序,比如控制台工具和服务器。Qt是面向对象的框架,使用特殊的代码生成扩展(称为元对象编译器(Meta Object Compiler, moc))以及一些宏,Qt很容易扩展,并且允许真正地组件编程。

历史

1991年由QT公司开发跨平台C++图形用户界面应用程序开发框架。

2008年,Qt Company科技被诺基亚公司收购,Qt也因此成为诺基亚旗下的编程语言工具。 2012年,Qt被Digia收购

版本 QT4---2009 QT5---2013 --主流版本 QT6---2021

特点 跨平台、面向对象、丰富的API

应用

咪咕音乐:咪咕音乐是中国移动倾力打造的正版音乐播放器

WPS Office:金山软件公司推出的办公软件

极品飞车:EA公司出品的著名赛车类游戏

2、QT的特点

QT的特点就是跨平台性很强,在QT中设计的界面可以放入不同的平台下运行如下图

嵌入式: 不同芯片型号的开发板 gec6818,rk1808,rk3399 .. 桌面端: windows ,ios ,linux ... 移动端: Android 微控制器: STM32 在QT 开发的程序可以在上述平台上运行!

3、QT模块

QT本身不是一种编程语言,而是一个用标准C++编写的跨平台开发类库,它对标准C++进行了很多扩展,引入很多新的概念和功能,比如信号与槽函数等等。同时为开发GUI应用程序和非GUI应用程序提供了各种类,QT类库中各种类是以模块的形式分类组织,一个模块就是一个编程主题比如数据库、网络、多线程等等

3.1基本模块

3.2扩展模块

4、QT工程创建

1.选择应用的窗体格式

项目选择Application,也就是创建一个Qt应用程序,那么右边就是选择以什么方式创建

Qt WidgetsAppliction 是基于c++语言的窗口工程

Qt Console Application 基于C++的控制台工程

Qtfor Python-Empty 创建基于Python的空工程。

Qtfor Python-window 创建基于Python的窗口工具。

Qt QuickApplication -Empty 创建基于QML的快速应用空工程。

Qt Quick Application -Scroll创建基于QML滑动窗口工程。

Qt Quick Application -Stack创建基于QML的栈窗口工程。

Qt QuickApplication -Swipe创建基于QML的触摸移动窗口工程

2.设置工程的名称与路径

3.设置类名

4.选择编译器

5、QT 工程解析

MVC模式:经典MVC模式中,M是指业务模型,V是指用户界面,C则是控制器,使用MVC的目的是将M和V的实现代码分离,从而使同一个程序可以使用不同的表现形式。其中,View的定义比较清晰,就是用户界面。模型-视图-控制器(MVC)

xxx.pro 工程配置

#添加QT 模块,现有模块才有类
QT       += core gui
greaterThan(QT_MAJOR_VERSION, 4): QT += widgets#使用c++11 语法进行工程编译
CONFIG += c++11#开启编译警告
DEFINES += QT_DEPRECATED_WARNINGS#添加工程源码
SOURCES += \main.cpp \mainwindow.cpp#添加工程头文件
HEADERS += \mainwindow.h#添加工程的界面文件
FORMS += \mainwindow.ui#默认的编译器路径 
qnx: target.path = /tmp/$${TARGET}/bin
else: unix:!android: target.path = /opt/$${TARGET}/bin
!isEmpty(target.path): INSTALLS += target

xxx.h 头文件

//防止头文件重复包含
#ifndef MAINWINDOW_H
#define MAINWINDOW_H//包含QMainWindow头文件
#include <QMainWindow>//宏定义 作用:用于关联 XXXX.UI文件
QT_BEGIN_NAMESPACE//定义一个UI 的命名空间包含MainWindow
namespace Ui { class MainWindow; }
//宏定义
QT_END_NAMESPACE//定义一个MainWindow类公共继承 QMainWindow
class MainWindow : public QMainWindow
{//宏定义 作用:用于实现信号与槽Q_OBJECTpublic://构造函数MainWindow(QWidget *parent = nullptr);//析构函数~MainWindow();private:Ui::MainWindow *ui; //定义一个私有成员 ui
};
#endif // MAINWINDOW_H

main.cpp 主函数

//添加用户自定义的mainwindow.h头文件
#include "mainwindow.h"//添加系统应用头文件
#include <QApplication>//主函数
int main(int argc, char *argv[])
{//创建一个应用对象QApplication a(argc, argv);//创建一个自定义窗体类MainWindow w;//显示窗体w.show();//执行应用return a.exec();
}

xxx.cpp 文件

//添加头文件 
#include "mainwindow.h"
//QT软件 自动生成窗体头文件 
#include "ui_mainwindow.h"//构造函数                         参数列表初始化 传递parent给父类  初始化UI指针
MainWindow::MainWindow(QWidget *parent): QMainWindow(parent), ui(new Ui::MainWindow)
{//调用ui类里面的setupUi函数ui->setupUi(this);
}//析构函数
MainWindow::~MainWindow()
{//释放构造函数分配的堆空间 delete ui;
}

6、纯手工创建一个QT 工程

1.创建一个纯C++ 工程

2.在xxx.pro 添加模块

TEMPLATE = app
CONFIG += console c++11
CONFIG -= app_bundle#添加QT 3大模块
QT       += core gui widgetsSOURCES += \main.cppQT本身不是一种编程语言,而是一个用标准C++编写的跨平台开发类库,它对标准C++进行了很多扩展,引入很多新的概念和功能,比如信号与槽函数等等。同时为开发GUI应用程序和非GUI应用程序提供了各种类,QT类库中各种类是以模块的形式分类组织,一个模块就是一个编程主题,比如数据库、网络、多线程等等。Qt Core模块:是QT类库的核心,所有其他模块都依赖这个模块。
Qt Gui模块:提供GUI程序的基本功能。
Qt Network模块:提供跨平台的网络功能。
Qt Widgets模块:提供创建用户界面的功能。

3.设计界面代码

创建QT应用对象QApplication,创建窗体对象QMainWindow,创建标签对象QLabel
需要包含对对应的头文件#include<QApplication><QMainWindow><QLabel>
退出的时候需要使用应用对象.exec()#include <iostream>using namespace std;//添加QT应用头文件
#include <QApplication>//添加自带窗体头文件
#include <QMainWindow>//添加标签头文件
#include <QLabel>int main(int argc, char **argv)
{//创建一个QT应用对象QApplication a(argc,argv);cout << "Hello World!" << endl;//创建一个窗体对象 ,必须要在创建窗体前创建一个应用,因为所有窗体都是在应用上面的QMainWindow  w;//创建一个标签对象,w对象是他的父亲QLabel lb(&w);lb.setText("今天真凉快"); //设置标签的内容lb.setGeometry(50,50,100,100); //设置标签的位置lb.show(); //显示标签//显示窗体w.show();//一直执行return a.exec();}

7、UI文件设计界面

UI的原理:当用户修改UI界面文件后,界面未发生任何改变,那么就要自己去修改 ui_xxxx.h 文件

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

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

相关文章

uniapp 回退到指定页面 保存页面状态

uniapp 历史页面回退到指定页面。 getCurrentPages() 内容如下 let delta getCurrentPages().reverse().findIndex(item > item.route "pages/popularScience/daodi") if(delta-1){uni.navigateTo({url: /pages/popularScience/daodi,success: res > {},fa…

【C++奇遇记】内存模型

&#x1f3ac; 博客主页&#xff1a;博主链接 &#x1f3a5; 本文由 M malloc 原创&#xff0c;首发于 CSDN&#x1f649; &#x1f384; 学习专栏推荐&#xff1a;LeetCode刷题集 数据库专栏 初阶数据结构 &#x1f3c5; 欢迎点赞 &#x1f44d; 收藏 ⭐留言 &#x1f4dd; 如…

HexoAssistant——博客上传助手(含源码)

文章目录 HexoAssistant——博客上传助手(含源码)1 前言2 效果演示3 源码地址4 总结 HexoAssistant——博客上传助手(含源码) 1 前言 旅行之余&#xff0c;用PyQt5写了一个博客上传的工具&#xff0c;旨在更加便捷地将本地文章上传Github博客。之前虽然配置过hexogithub的博客…

关于打包多模块SpringBoot项目并通过宝塔上传服务器

打包 —— 如何打包多模块项目&#xff0c;参考b站up主&#xff1a;[喜欢编程的代先生] 的视频 总结&#xff1a;1. 对着视频里看一下父模块和各个子模块pom.xml文件关于打包工具的依赖是否正确。2. 从最底层开始打包&#xff0c;逐层向上&#xff0c;最后再合并打包。 部署 …

【计算机网络篇】TCP协议

✅作者简介&#xff1a;大家好&#xff0c;我是小杨 &#x1f4c3;个人主页&#xff1a;「小杨」的csdn博客 &#x1f433;希望大家多多支持&#x1f970;一起进步呀&#xff01; TCP协议 1&#xff0c;TCP 简介 TCP&#xff08;Transmission Control Protocol&#xff09;是…

uniapp,使用canvas制作一个签名版

先看效果图 我把这个做成了页面&#xff0c;没有做成组件&#xff0c;因为之前我是配合uview-plus的popup弹出层使用的&#xff0c;这种组件好像是没有生命周期的&#xff0c;第一次打开弹出层可以正常写字&#xff0c;但是关闭之后再打开就不会显示绘制的线条了&#xff0c;还…

【C语言进阶(4)】指针和数组笔试题

文章目录 Ⅰ 一维数组Ⅱ 字符数组题型 1题型 2题型 3 Ⅲ 二维数组 数组名的意义 sizeof(数组名)&#xff0c;这里的数组名表示整个数组&#xff0c;计算的是整个数组的大小。&数组名&#xff0c;这里的数组名表示的是整个数组&#xff0c;取出的是整个数组的地址。除了上述…

2023年03月 C/C++(三级)真题解析#中国电子学会#全国青少年软件编程等级考试

第1题&#xff1a;和数 给定一个正整数序列&#xff0c;判断其中有多少个数&#xff0c;等于数列中其他两个数的和。 比如&#xff0c;对于数列1 2 3 4, 这个问题的答案就是2, 因为3 2 1, 4 1 3。 时间限制&#xff1a;10000 内存限制&#xff1a;65536 输入 共两行&#x…

AMBA总线协议(6)——AHB(四):传输细节

一、前言 在之前的文章中&#xff0c;我们已经讲述了AHB传输中的两种情况&#xff0c;基本传输和猝发传输。我们进行一个简单的回顾&#xff0c;首先&#xff0c;开始一次传输之前主机需要向仲裁器申请获得总线的使用权限&#xff0c;然后主机给出地址和控制信号&#xff0c;根…

【JavaEE进阶】SpringMVC

文章目录 一. 简单认识SpringMVC1. 什么是SpringMVC?2. SpringMVC与MVC的关系 二. SpringMVC1. SpringMVC创建和连接2. SpringMVC的简单使用2.1 RequestMapping 注解介绍2.2 RequestMapping支持的请求类型2.3 GetMapping 和 PostMapping 3. 获取参数3.1 传递单个参数3.2 传递对…

【linux】2 Linux编译器-gcc/g++和Linux调试器-gdb

文章目录 一、Linux编译器-gcc/g使用1.1 背景知识1.2 gcc如何完成1.3 函数库1.4 gcc选项 二、linux调试器-gdb使用2.1 背景2.2 开始使用 总结 ヾ(๑╹◡╹)&#xff89;" 人总要为过去的懒惰而付出代价ヾ(๑╹◡╹)&#xff89;" 一、Linux编译器-gcc/g使用 1.1 背景…

/root/.ssh/config line 2: Bad protocol 2 host key algorithms ‘+ssh-rsa‘.

文章目录 1、问题2、查看openssh版本3、解决问题4、重新生成密钥5、查看是否可连接工蜂 1、问题 ssh访问工蜂报错&#xff1a; [rootlocalhost .ssh]# ssh -T gitgit.code.tencent.com /root/.ssh/config line 2: Bad protocol 2 host key algorithms ‘ssh-rsa’. 2、查看o…

升级Qt后VS项目不能使用

错误场景&#xff1a; 如果你的QT卸载了装了新版,那么VS你原来设置的项目就不能跑了. 问题 升级Qt后&#xff36;&#xff33;项目不能使用 跟我一起开始挽救自己的项目 升级Qt后&#xff36;&#xff33;项目不能使用 假如你从5.14.6 升级到 Qt6.2并删除了原来的QT 你在VS里…

Java网络编程(一)网络基础

概述 计算机网络是指将地理位置不同的具有独立功能的多台计算机及其外部设备,通过通信线路连接起来,在网络操作系统、网络管理软件及网络通信协议的管理和协调下,实现资源共享和信息传递 网络分类 局域网(LAN) 局域网是一种在小区域内使用的,由多台计算机组成的网络,覆盖范围…

春秋云镜 CVE-2019-16692

春秋云镜 CVE-2019-16692 phpIPAM 1.4 - SQL Injection 靶标介绍 phpIPAM 1.4后台存在SQL Injection。 启动场景 漏洞利用 后台SQL注入&#xff0c;admin/admin888登陆成功。 exp POST /app/admin/routing/edit-bgp-mapping-search.php HTTP/1.1 Host: xxx.com Content-Le…

mysql从传统模式切到GTID模式后启动主从,主从异常报错1236

一 前言 MySQL 的主从复制作为一项高可用特性&#xff0c;用于将主库的数据同步到从库&#xff0c;在维护主从复制数据库集群的时候&#xff0c;作为专职的MySQL DBA&#xff0c;笔者相信大多数人都会遇到“Got fatal error 1236 from master when reading data from binary …

MySQL数据库:内置函数

日期函数 规定&#xff1a;日期&#xff1a;年月日 时间&#xff1a;时分秒 函数名称作用描述current_date()当前日期current_time()当前时间current_timestamp()当前时间戳date(datetime)返回datetime参数的日期部分date_add(date,interval d_value_type)在date中添加…

仿mudou高性能高并发服务器

"这个结局是我的期待&#xff0c;我会一直为你祝福。" 项目实现目标: 仿muduo库One Thread One Loop式主从Reacto模型实现高并发服务器。通过实现高并发服务器组件&#xff0c;简洁快速完成搭建一个高性能服务器。并且&#xff0c;通过组件内提供的不同应⽤层协议⽀…

Kafka基本使用

查看Kafka的进程是否在运行 #命令行终端中运行如下命令 ps -ef | grep kafkafind / -iname kafka-server-start.shcd /usr/local/kafka/bin/#启动kafka ./kafka-server-start.sh -daemon /usr/local/kafka/config/server.propertiesKafka默认使用9092端口提供服务&#xf…

九、Linux下,如何在命令行进入文本编辑页面?

1、文本编辑基础 说到文本编辑页面&#xff0c;那就必须提到vi和vim&#xff0c;两者都是Linux系统中&#xff0c;常用的文本编辑器 2、三种工作模式 3、使用方法 &#xff08;1&#xff09;在进入Linux系统&#xff0c;在输入vim text.txt之后&#xff0c;会进入文本编辑中&…