嵌入式Qt 第一个Qt项目

news2024/10/6 8:35:46

一.创建Qt项目 

打开Qt Creator 界面选择 New Project或者选择菜单栏 【文件】-【新建文件或项目】菜单项

  弹出New Project对话框,选择Qt Widgets Application

选择【Choose】按钮,弹出如下对话框

设置项目名称和路径,按照向导进行下一步 

 选择编译套件

向导会默认添加一个继承自QMainWindow的类,可以在此修改类的名字和基类。默认的基类有QMainWindow、QWidget以及QDialog三个,我们可以选择QWidget(类似于空窗口),这里我们可以先创建一个不带UI的界面,继续下一步

系统会默认给我们添加main.cpp、mywidget.cpp、 mywidget.h和一个.pro项目文件,点击完成,即可创建出一个Qt桌面程序.

二.项目文件介绍

Qt Creator 和其他 IDE 开发软件一样。都是分组管理项目内的各种源文件,下面是项目内 的文件简介。

 01_hello_world.pro 是项目管理文件,这个项目管理文件十分重要,当你加入了文件或者删 除了文件,Qt Creator 会自动修改这个*.pro 文件。有时候需要打开这个*.pro 文件添加我们 的设置项。

Header 分组,这个节点下存放的是项目内所有的头文件*.h。

Source 分组,这个节点下存放的是项目内的所有 C++源码文件*.cpp。

Forms 分组,这个节点下是存放项目内所有界面文件*.ui。*.ui 文件由 XML 语言描述组成, 编译时会生成相应的 cpp 文件,这样交叉编译器就可以编译它了。

1. 项目文件*.pro

项目管理文件十分重要,当加入了文件或者删除了文件时, Qt Creator 会自动修改项目文件,有时会通过该文件来添加设置项。

QT += core gui	#添加Qt的支持模块,core与gui库是Qt的默认设置
#比较Qt5版本,若是Qt5版本,在main.cpp中application是在QtWidgets下的
greaterThan(QT_MAJOR_VERSION, 4): QT += widgets
#配置使用c++11 
CONFIG += c++11
#添加 QT_DEPRECATED_WARNINGS 定义
DEFINES += QT_DEPRECATED_WARNINGS
#SOURCES 下是源文件
SOURCES += \
	main.cpp \
	mainwindow.cpp
#HEADERS 下是头文件
HEADERS += \
	mainwindow.h
#FORMS 下是ui界面文件
FORMS += \
	mainwindow.ui
#部署默认的规则
qnx: target.path = /tmp/$${TARGET}/bin
else: unix:!android: target.path = /opt/$${TARGET}/bin
!isEmpty(target.path): INSTALLS += target
2. 头文件*.h

Headers 下的 mainwindow.h,一般有与之对应的 cpp 文件 mianwindow.cpp,其中mainwindow.h 包含类的声明, mianwindow.cpp 包含类的实现。

#ifndef MAINWINDOW_H
#define MAINWINDOW_H

#include <QMainWindow>

QT_BEGIN_NAMESPACE
namespace Ui { class MainWindow; } 	//定义命名空间Ui
QT_END_NAMESPACE

class MainWindow : public QMainWindow
{
	Q_OBJECT //所有用到信号的类都要加这个宏

	public:
		MainWindow(QWidget *parent = nullptr);
		~MainWindow();

	private:
		Ui::MainWindow *ui;
};
#endif // MAINWINDOW
 3. 源文件*.cpp

Sources 下的 mainwindow.cpp,有如下内容:

#include "mainwindow.h"
// ui_mainwindow.h 文件是Qt根据.ui文件自动生成的,即要点击构建后才生成
#include "ui_mainwindow.h"
//在MainWindow构造函数中用“,”隔开,new一个Ui中的 MainWindow,里初始化成员的一种方法
MainWindow::MainWindow(QWidget *parent) : QMainWindow(parent) , ui(new Ui::MainWindow)
{
	ui->setupUi(this);	//进行界面初始化
}

MainWindow::~MainWindow()
{
	delete ui;	//删除ui
}

Sources 下的 main.cpp,有如下内容:

#include "mainwindow.h"
//包含QApplication类的定义。每个应用程序中都必须使用QApplication对象
//QApplication管理了各种各样的应用程序的广泛资源,比如默认的字体和光标
#include <QApplication>

int main(int argc, char *argv[])
{
	QApplication a(argc, argv);
	MainWindow w;	//创建MainWindow对象w
	w.show();		//调用方法show(),显示程序界面
	//main()把控制转交给Qt,当应用程序退出时exec()就会返回
	//在exec()中,Qt接受并处理用户和系统的事件并把它们传递给适当的窗口部件
	return a.exec();	
}
4. 样式文件*.ui

ui 文件由 XML 语言描述组成,编译时会生成相应的 cpp 文件,这样交叉编译器就可以编译它了。mainwindow.ui 是一个 xml 类型的文件,内容如下。 ui 文件是生成的不能手动编辑,只能够通过图形界面修改其属性,双击 mainwindow.ui 后可以跳转到设计界面。

<?xml version="1.0" encoding="UTF-8"?>
<ui version="4.0">
	<class>MainWindow</class>
	<widget class="QMainWindow" name="MainWindow">
		<property name="geometry">
			<rect>
				<x>0</x>
				<y>0</y>
				<width>800</width>
				<height>600</height>
			</rect>
		</property>
		<property name="windowTitle">
			<string>MainWindow</string>
		</property>
	<widget class="QWidget" name="centralwidget"/>
	<widget class="QMenuBar" name="menubar">
		<property name="geometry">
			<rect>
				<x>0</x>
				<y>0</y>
				<width>800</width>
				<height>28</height>
			</rect>
		</property>
	</widget>
	<widget class="QStatusBar" name="statusbar"/>
	</widget>
	<resources/>
	<connections/>
</ui>

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

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

相关文章

vue3 腾讯tdesign 后台管理框架的使用

1.介绍 TDesign 是具有包容性的设计体系&#xff0c;它强调为业务提供产品、服务等过程中&#xff0c;追求以人为本、人人受益的包容性&#xff0c;要求搭建过程中&#xff0c;了解业务底层&#xff0c;理解业务场景的多样性&#xff0c;并在繁杂的业务场景中寻找共性和特性&a…

论文阅读:GamutMLP A Lightweight MLP for Color Loss Recovery

这篇文章是关于色彩恢复的一项工作&#xff0c;发表在 CVPR2023&#xff0c;其中之一的作者是 Michael S. Brown&#xff0c;这个老师是加拿大 York 大学的&#xff0c;也是 ISP 领域的大牛&#xff0c;现在好像也在三星研究院担任兼职&#xff0c;这个老师做了很多这种类似的工…

unity2017 遇到visual studio 2017(社区版) 30日试用期到了

安装unity2017 遇到visual studio 2017 30日试用期到了&#xff0c;网上百度搜了好多方法都没有成功。 最后用了这个方法&#xff1a; 1)启动vs2017&#xff0c;在弹出要登录的窗口之前&#xff0c;迅速的点击工具-》选项-》账户&#xff0c;勾选在添加账户或对账户重新进行身…

Netty应用(九) 之 编解码器概念 Netty常见的编解码器

目录 22.编解码器 22.1 编解码的概念 22.2 netty中的编解码 22.3 序列化 23.编解码器在使用过程中的两部分核心内容 23.1 序列化协议&#xff08;编码格式&#xff09;&#xff08;传输数据的格式&#xff09; 23.1.1 Java默认的序列化与反序列化 23.1.2 XML的序列化与反…

LeetCode 0987.二叉树的垂序遍历:遍历时存节点信息,遍历完自定义排序

【LetMeFly】987.二叉树的垂序遍历&#xff1a;遍历时存节点信息&#xff0c;遍历完自定义排序 力扣题目链接&#xff1a;https://leetcode.cn/problems/vertical-order-traversal-of-a-binary-tree/ 给你二叉树的根结点 root &#xff0c;请你设计算法计算二叉树的 垂序遍历…

Java语法学习反射

Java语法学习反射 大纲 基本介绍class的介绍 具体案例 1. 基本介绍 流程图&#xff08;程序在计算机的阶段&#xff09; 反射的主要的类 这个提高效率不大 2. class的介绍 对于第三点&#xff1a;首先类只会加载一次&#xff0c;得到的class的对象&#xff0c;也只有一…

Python爬虫之Ajax数据爬取基本原理

前言 有时候我们在用 requests 抓取页面的时候&#xff0c;得到的结果可能和在浏览器中看到的不一样&#xff1a;在浏览器中可以看到正常显示的页面数据&#xff0c;但是使用 requests 得到的结果并没有。这是因为 requests 获取的都是原始的 HTML 文档&#xff0c;而浏览器中…

【Spring原理进阶】SpringMVC调用链+JSP模板应用讲解

&#x1f389;&#x1f389;欢迎光临&#x1f389;&#x1f389; &#x1f3c5;我是苏泽&#xff0c;一位对技术充满热情的探索者和分享者。&#x1f680;&#x1f680; &#x1f31f;特别推荐给大家我的最新专栏《Spring 狂野之旅&#xff1a;底层原理高级进阶》 &#x1f680…

Apache 神禹(shenyu)源码阅读(一)——Admin向Gateway的数据同步(Admin端)

源码版本&#xff1a;2.6.1 单机源码启动项目 启动教程&#xff1a;社区新人开发者启动及开发防踩坑指南 源码阅读 前言 开了个新坑&#xff0c;也是第一次阅读大型项目源码&#xff0c;写文章记录。 在写文章前&#xff0c;已经跑了 Divide 插件体验了一下&#xff08;体…

Java的常见api以及异常情况-2

目录 1、equals方法源码解读 2、replace替换方法 3、split分割方法 4、indexOf方法 5、常见的api 1、equals方法源码解读 public class API_test04 {public static void main(String[] args) {String str1 "rx";String str2 "rx";System.out.prin…

模态、模式和真实发生

模态和模式均是用来描述某一对象或系统可能出现的特性、状态或行为&#xff0c;它们既包括逻辑上的抽象可能性&#xff0c;也涵盖现实中具体的现象和事件结构。模态更多地关联于逻辑可能性和必然性&#xff0c;而模式则侧重于现象的重复性和规律性&#xff0c;两者都可以反映真…

【Java程序设计】【C00269】基于Springboot的漫画网站(有论文)

基于Springboot的漫画网站&#xff08;有论文&#xff09; 项目简介项目获取开发环境项目技术运行截图 项目简介 这是一个基于Springboot的漫画网站 本系统分为系统功能模块、管理员功能模块、以及用户功能模块。 系统功能模块&#xff1a;在系统首页可以查看首页、漫画投稿、…

websocket具体实践

websocket具体实践 参考&#xff1a; 如何使用websocket WebSocket客户端连接不上和掉线的问题以及解决方案 继6月份对websocket一顿了解之后&#xff0c;我们的项目也要上websocket了&#xff0c;虽然这部分不是我做&#xff0c;但是借此机会&#xff0c;我也想要尝试一下&am…

[C/C++] -- CMake使用

CMake&#xff08;Cross-platform Make&#xff09;是一个开源的跨平台构建工具&#xff0c;用于自动生成用于不同操作系统和编译器的构建脚本。它可以简化项目的构建过程&#xff0c;使得开发人员能够更方便地管理代码、依赖项和构建设置。 CMake 使用一个名为 CMakeLists.tx…

【Java程序设计】【C00266】基于Springboot的超市进存销管理系统(有论文)

【Java程序设计】【C00266】基于Springboot的超市进存销管理系统&#xff08;有论文&#xff09; 项目简介项目获取开发环境项目技术运行截图 项目简介 这是一个基于Springboot的超市进销存系统 本系统分为登录注册模块、管理员功能模块以及员工功能模块。 登录注册模块&#…

Solidworks:平面工程图练习

把草图变成工程图&#xff0c;遇到第一个问题是线宽需要用鼠标选中后再设置线宽和颜色。我觉得应该有一个自动设置现款的功能&#xff0c;不知道有没有&#xff0c;我找了半天也没找到。 另一个问题是&#xff0c;作业代号字体上下颠倒了&#xff0c;不知道这是啥意思。 第三个…

鸿蒙开发理论之页面和自定义组件生命周期

1、自定义组件和页面的关系 页面&#xff1a;即应用的UI页面。可以由一个或者多个自定义组件组成&#xff0c;Entry装饰的自定义组件为页面的入口组件&#xff0c;即页面的根节点&#xff0c;一个页面有且仅能有一个Entry。只有被Entry装饰的组件才可以调用页面的生命周期。自…

从零开始学howtoheap:理解fastbins的​unsorted bin攻击

how2heap是由shellphish团队制作的堆利用教程&#xff0c;介绍了多种堆利用技术&#xff0c;后续系列实验我们就通过这个教程来学习。环境可参见从零开始配置pwn环境&#xff1a;从零开始配置pwn环境&#xff1a;从零开始配置pwn环境&#xff1a;优化pwn虚拟机配置支持libc等指…

开源版发卡小程序源码,云盘发卡微信小程序源码带PC端

一款发卡小程序。带PC端 系统微信小程序前端采用nuiapp 后端采用think PHP6 PC前端采用vue开发 使用HBuilderX工具打开&#xff0c;运行到微信小程序工具&#xff0c;系统会自动打包微信小程序代码 修改文件common/request/request.js 改成你的后端网址 微信小程序端完全…

【原创 附源码】Flutter安卓及iOS海外登录--Google登录最详细流程

最近接触了几个海外登录的平台&#xff0c;踩了很多坑&#xff0c;也总结了很多东西&#xff0c;决定记录下来给路过的兄弟坐个参考&#xff0c;也留着以后留着回顾。更新时间为2024年2月8日&#xff0c;后续集成方式可能会有变动&#xff0c;所以目前的集成流程仅供参考&#…