当前位置: 首页 > news >正文

Qt 5.14.2 学习记录 —— 일 新项目

文章目录

  • 1、创建
  • 2、查看代码 ---- main.cpp
  • 3、查看代码 ---- widgt.h
  • 4、查看代码 ---- widgt.cpp和widget.ui
  • 5、查看代码 ---- Empty.pro
  • 6、运行产生的中间文件


1、创建

左上角的文件,新建文件或项目。如果要写一个GUI程序,应当选择Application,另一个选择Qt Widgets Application,这是传统的开发GUI方式。下一个则是写一个TUI,也就是终端。下面的几个Quick则是新的GUI开发方式,不过很多还是会用Widgets。

在这里插入图片描述

choose并选择路径,确定名字后,Build System部分,Qt会通过这里的工具,基于用户的代码,生成对应的C++代码,也就是元编程,最终编译的代码就是这些。qmake是挺老的Qt构建工具;CMake在很多开源项目都用,不只Qt在用;Obs是比较新的Qt构建工具,但用的人很少。这里就用qmake。

Details部分,Base class是指,Qt通过构建工具生成的代码中,主要的类的父类。QMainWindows是一个完整的应用程序窗口;QWidget表示一个控件,也就是窗口上的元素,比如按钮,下拉框等;QDialog表示对话框。Qt中内置的类都是以Q开头的名字。

选择的Base class和上面的类名最好用一样的,比如默认的Widget和CWidget。Qt可以通过C++代码创建界面,也可以通过Form file以图形化的方式来生成界面。勾选上这个Form file就可以使用Qt Designer或Qt Creator来编辑这个ui文件。

下一个部分和翻译文件相关,可以直接下一步。

之前选择了什么,现在就显示什么,比如MSVC和MinGW。我之前只选了MinGW。然后下一步即可,不需要填别的。

最后一部分,如果要提交到仓库去,就选择git,没有就None就行了。

现在这是我的初始界面:

在这里插入图片描述

运行就是左下角右箭头,下面则是调试。运行后初始的界面是这样的:

在这里插入图片描述

想要再创建一个项目,左上角文件里关闭所有项目和编辑器,然后再创建即可。

如果要创建一个C++类,那就在文件和类里选择C++,选择右边的C++ Class,类名自己定,Base class用来选择继承自哪个库中的类。

2、查看代码 ---- main.cpp

初始main.cpp:

在这里插入图片描述

引入的头文件就是选择文件Base class时随之对应选择的头文件。编写一个Qt界面,必须要有QApplication对象。Widget就是选择Base class时写的类名。那么这段代码就是创建一个控件对象,并显示出来。Widget的基类是QWidget,show()让控件显示出来,hide()让控件隐藏,exec()执行程序,这三个方法就是QWidget的。不过Qt的exec和Linux的exec,即进程程序替换不是一个概念。

3、查看代码 ---- widgt.h

初始widgt.h:

在这里插入图片描述

这里也引入了QWidget头文件。定义了一个命名空间。

Widget基类是QWidget,也就是创建时选择的基类,Qt SDK内置,需要引入头文件QWidget。对于Qt的命名规则,使用Qt中内置的类,大部分情况下,包含的头文件的名字和类名一致。

Q_OBJECT是内置的宏,在使用Qt的信号和槽时需要用。

public中传的参数,parent是一个父节点。Qt对象创建时,需要把这个对象挂到对象树上,挂的时候需要指定父节点。对象树是一个N叉树。

最后的私有成员,和from file有关,UI。

4、查看代码 ---- widgt.cpp和widget.ui

在这里插入图片描述

ui_widget.h是form file被qmake生成的头文件。构造部分是把form file生成的界面和当前widget关联起来。

直接双击widget.ui文件,Qt Creator会调用Qt Designer打开ui文件,出现一个图形化界面编辑器,最左边也来到了设计,编辑那里也打开了这个文件。左边是Qt内置控件,中间是生成的界面。直接拖拽控件到中间就可以创建出具体的界面了。右边黄色的那一部分是控件属性栏。

点回编辑,查看ui文件。

在这里插入图片描述

ui文件的格式是xml格式。标签有些是Qt定义的,有些可以自定义。xml文件描述界面,qmake这些工具会依据xml文件生成对应的C++代码,就生成完整的界面了。

5、查看代码 ---- Empty.pro

在这里插入图片描述

.pro文件是Qt项目的工程文件,也是qmake等工具构建时的重要依据。

第一行是要引入的Qt模块,可修改。CONFIG += c++11可修改。

SOURCES到FORMS描述了当前项目参与构建的文件,不需要手动修改。

qmake搭配.pro文件和Linux的makefile作用类似。Qt Creator把这个过程中编译的细节都封装好,用户就不需要关心这些。

6、运行产生的中间文件

运行后,右击Empty.pro点击在Explorer中显示,打开一个文件夹。

它的上级目录:
在这里插入图片描述

build-Empty就是运行过程中生成的临时文件。里面有Makefile,Qt编译时的qmake等工具还是会用到Makefile。ui_widget.h则是widget.ui自动生成的文件。

在这里插入图片描述

Ui_Widget是Qt自动生成的,在widget.h中被使用:

在这里插入图片描述

widget.cpp中使用了setupUi方法:

在这里插入图片描述
setupUi进行界面创建操作,是依据xml文件生成的。

目录下的debug中的Empty.exe就是生成的可执行文件,运行后出现的界面。

结束。

相关文章:

Qt 5.14.2 学习记录 —— 일 新项目

文章目录 1、创建2、查看代码 ---- main.cpp3、查看代码 ---- widgt.h4、查看代码 ---- widgt.cpp和widget.ui5、查看代码 ---- Empty.pro6、运行产生的中间文件 1、创建 左上角的文件,新建文件或项目。如果要写一个GUI程序,应当选择Application&#x…...

uni-app:实现普通选择器,时间选择器,日期选择器,多列选择器

效果 选择前效果 1、时间选择器 2、日期选择器 3、普通选择器 4、多列选择器 选择后效果 代码 <template><!-- 时间选择器 --><view class"line"><view classitem1><view classleft>时间</view><view class"right&quo…...

Unity3D仿星露谷物语开发17之空库存栏UI

1、目标 将库存栏放在游戏界面中&#xff0c;一般情况下角色居中展示时库存栏在底部&#xff0c;当角色位于界面下方时库存栏展示在顶部避免遮挡。 2、CanvasGroup组件 用于集中控制UI元素的透明度、交互性和射线投射行为。CanvasGroup的Alpha属性允许渐变效果&#xff0c;I…...

QT------模型/视图

一、模型/视图结构概述 基本原理&#xff1a; Qt 的模型/视图&#xff08;Model/View&#xff09;架构将数据的存储和显示分离&#xff0c;提高了代码的可维护性和复用性。模型&#xff08;Model&#xff09;&#xff1a;负责存储和管理数据&#xff0c;提供数据的访问接口&am…...

Git - 记录一次由于少输入了一个命令导致的更改丢失

Git - 记录一次由于少输入了一个参数导致的更改丢失 前言 某晚我激情开发了几个小时&#xff0c;中途没有进行commit存档。准备睡觉时&#xff0c;我想创建一个新的分支并将今晚所有更改提交到新分支上&#xff08;似乎应该开发时候就创建&#xff1f;&#xff09;。 然后因…...

nodeJS下npm和yarn的关系和区别详解

一、命令对应关系 1. 初始化项目 操作npm 命令Yarn 命令初始化项目npm inityarn init跳过提问快速初始化npm init -yyarn init -y 2. 安装依赖 操作npm 命令Yarn 命令安装项目所有依赖npm installyarn install添加依赖npm install <package-name>yarn add <package…...

党员学习交流平台

本文结尾处获取源码。 本文结尾处获取源码。 本文结尾处获取源码。 一、相关技术 后端&#xff1a;Java、JavaWeb / Springboot。前端&#xff1a;Vue、HTML / CSS / Javascript 等。数据库&#xff1a;MySQL 二、相关软件&#xff08;列出的软件其一均可运行&#xff09; I…...

HTML5 文件上传(File Upload)详解

HTML5 文件上传&#xff08;File Upload&#xff09;详解 HTML5 提供了强大的文件上传功能&#xff0c;允许用户通过网页选择文件并上传到服务器。以下是关于文件上传控件的详细说明。 1. 基本的文件上传控件 使用 <input> 标签的 type"file" 属性可以创建一…...

1.2.1-2部分数据结构的说明02_链表

&#xff08;1&#xff09;链表数据结构&#xff1a; 概念&#xff1a; 将列表中相互连接的节点不连续的存储在内存中。与数据不同&#xff0c;我们无法再恒定时间内访问任何元组&#xff0c;如果遍历所有则花费时间与元素总数n成正比。插入和删除1个元素的时间复杂度都是O(n…...

vue elementUI Plus实现拖拽流程图,不引入插件,纯手写实现。

vue elementUI Plus实现拖拽流程图&#xff0c;不引入插件&#xff0c;纯手写实现。 1.设计思路&#xff1a;2.设计细节3.详细代码实现 1.设计思路&#xff1a; 左侧button列表是要拖拽的组件。中间是拖拽后的流程图。右侧是拖拽后的数据列表。 我们拖动左侧组件放入中间的流…...

linux上使用cmake编译的方法

一、hello 例程仅基于一个cpp文件 C文件或工程进行编译时可以使用g指令&#xff08;需要对每一个程序和源文件分别使用g指令编译&#xff09;&#xff0c;当程序变大时&#xff0c;一个工程文件往往会包含很文件夹和源文件&#xff0c;这时我们需要的编译指令将越来越长&#…...

如何实现el-select多选下拉框中嵌套复选框并加校验不为空功能呢?

如何实现el-select多选下拉框中嵌套复选框并加校验不为空功能呢&#xff1f; 要实现的效果图选择部分品牌但不选选项效果问题概述实现方案el-select组件与el-checkbox组件无缝衔接给form表单加自定义校验规则 要实现的效果图 选择部分品牌但不选选项效果 问题概述 相信大家看到…...

源码理解 UE4中的 FCookStatsManager::FAutoRegisterCallback RegisterCookStats

官方文档&#xff1a;https://dev.epicgames.com/documentation/zh-cn/unreal-engine/API/Runtime/Core/ProfilingDebugging/FCookStatsManager文档中的注释&#xff1a; When a cook a complete that is configured to use stats (ENABLE_COOK_STATS), it will broadcast this…...

Android 根据内存大小显示MTP模式连接PC时的名称

项目有两种内存&#xff0c;要求根据连接电脑拷贝文件时的盘符名称根据内存大小显示不同名称。 frameworks/base/media/java/android/mtp/MtpDatabase.java//mh import android.app.ActivityManager; ...-894,7 896,19 public class MtpDatabase implements AutoCloseable {p…...

不只是mini-react第一节:实现最简单mini-react

项目总结构&#xff1a; ├─ &#x1f4c1;core │ ├─ &#x1f4c4;React.js │ └─ &#x1f4c4;ReactDom.js ├─ &#x1f4c1;node_modules ├─ &#x1f4c1;tests │ └─ &#x1f4c4;createElement.spec.js ├─ &#x1f4c4;App.js ├─ &#x1f4c4;in…...

前端路由layout布局处理以及菜单交互(三)

上篇介绍了前端项目部署以及基本依赖的应用&#xff0c;这次主要对于路由以及布局进行模块化处理 一、 创建layout模块 1、新建src/layout/index.vue <template><el-container class"common-layout"><!-- <el-aside class"aside">&l…...

小结:DNS,HTTP,SMTP,IMAP,FTP,Telnet,TCP,ARP,ICMP

DNS&#xff08;Domain Name System&#xff0c;域名系统&#xff09; 是互联网的重要组成部分&#xff0c;它负责将人类易读的域名&#xff08;如 www.google.com&#xff09;转换为机器可以识别的 IP 地址&#xff08;如 142.250.72.206&#xff09;。这一过程被称为域名解析…...

【C++】P2550 [AHOI2001] 彩票摇奖

博客主页&#xff1a; [小ᶻ☡꙳ᵃⁱᵍᶜ꙳] 本文专栏: C 文章目录 &#x1f4af;前言&#x1f4af;题目描述输入格式&#xff1a;输出格式&#xff1a;输入输出样例&#xff1a; &#x1f4af;题解思路1. 问题解析 &#x1f4af;我的实现实现逻辑问题分析 &#x1f4af;老…...

并发服务器框架——zinx

zinx框架 Zinx 是一个用 Go 语言编写的高性能、轻量级的 TCP 服务器框架&#xff0c;它被设计为简单、快速且易于使用。Zinx 提供了一系列的功能&#xff0c;包括但不限于连接管理、数据编解码、业务处理、负载均衡等&#xff0c;适用于构建各种 TCP 网络服务&#xff0c;如游戏…...

Unity 中计算射线和平面相交距离的原理

有此方法 能够计算射线和平面是否相交以及射线起点到平面交点的距离 代码分析 var dot Vector3.Dot(ray.direction, plane.normal);计算射线和平面法线的点积&#xff0c;如果大于等于0&#xff0c;则说明射线和平面没有相交&#xff0c;否则&#xff0c;说明射线和平面相交…...

Python爬虫实战:研究MechanicalSoup库相关技术

一、MechanicalSoup 库概述 1.1 库简介 MechanicalSoup 是一个 Python 库,专为自动化交互网站而设计。它结合了 requests 的 HTTP 请求能力和 BeautifulSoup 的 HTML 解析能力,提供了直观的 API,让我们可以像人类用户一样浏览网页、填写表单和提交请求。 1.2 主要功能特点…...

线程同步:确保多线程程序的安全与高效!

全文目录&#xff1a; 开篇语前序前言第一部分&#xff1a;线程同步的概念与问题1.1 线程同步的概念1.2 线程同步的问题1.3 线程同步的解决方案 第二部分&#xff1a;synchronized关键字的使用2.1 使用 synchronized修饰方法2.2 使用 synchronized修饰代码块 第三部分&#xff…...

测试markdown--肇兴

day1&#xff1a; 1、去程&#xff1a;7:04 --11:32高铁 高铁右转上售票大厅2楼&#xff0c;穿过候车厅下一楼&#xff0c;上大巴车 &#xffe5;10/人 **2、到达&#xff1a;**12点多到达寨子&#xff0c;买门票&#xff0c;美团/抖音&#xff1a;&#xffe5;78人 3、中饭&a…...

跨链模式:多链互操作架构与性能扩展方案

跨链模式&#xff1a;多链互操作架构与性能扩展方案 ——构建下一代区块链互联网的技术基石 一、跨链架构的核心范式演进 1. 分层协议栈&#xff1a;模块化解耦设计 现代跨链系统采用分层协议栈实现灵活扩展&#xff08;H2Cross架构&#xff09;&#xff1a; 适配层&#xf…...

ABAP设计模式之---“简单设计原则(Simple Design)”

“Simple Design”&#xff08;简单设计&#xff09;是软件开发中的一个重要理念&#xff0c;倡导以最简单的方式实现软件功能&#xff0c;以确保代码清晰易懂、易维护&#xff0c;并在项目需求变化时能够快速适应。 其核心目标是避免复杂和过度设计&#xff0c;遵循“让事情保…...

Ubuntu系统多网卡多相机IP设置方法

目录 1、硬件情况 2、如何设置网卡和相机IP 2.1 万兆网卡连接交换机&#xff0c;交换机再连相机 2.1.1 网卡设置 2.1.2 相机设置 2.3 万兆网卡直连相机 1、硬件情况 2个网卡n个相机 电脑系统信息&#xff0c;系统版本&#xff1a;Ubuntu22.04.5 LTS&#xff1b;内核版本…...

LangChain【6】之输出解析器:结构化LLM响应的关键工具

文章目录 一 LangChain输出解析器概述1.1 什么是输出解析器&#xff1f;1.2 主要功能与工作原理1.3 常用解析器类型 二 主要输出解析器类型2.1 Pydantic/Json输出解析器2.2 结构化输出解析器2.3 列表解析器2.4 日期解析器2.5 Json输出解析器2.6 xml输出解析器 三 高级使用技巧3…...

20250609在荣品的PRO-RK3566开发板的Android13下解决串口可以执行命令但是脚本执行命令异常的问题

20250609在荣品的PRO-RK3566开发板的Android13下解决串口可以执行命令但是脚本执行命令异常的问题 2025/6/9 20:54 缘起&#xff0c;为了跨网段推流&#xff0c;千辛万苦配置好了网络参数。 但是命令iptables -t filter -F tetherctrl_FORWARD可以在调试串口/DEBUG口正确执行。…...

7种分类数据编码技术详解:从原理到实战

在数据分析和机器学习领域&#xff0c;分类数据&#xff08;Categorical Data&#xff09;的处理是一个基础但至关重要的环节。分类数据指的是由有限数量的离散值组成的数据类型&#xff0c;如性别&#xff08;男/女&#xff09;、颜色&#xff08;红/绿/蓝&#xff09;或产品类…...

timestamp时间戳转换工具

作为一名程序员&#xff0c;一款高效的 在线转换工具 &#xff08;在线时间戳转换 计算器 字节单位转换 json格式化&#xff09;必不可少&#xff01;https://jsons.top 排查问题时非常痛的点: 经常在秒级、毫秒级、字符串格式的时间单位来回转换&#xff0c;于是决定手撸一个…...