Qt_了解Qt Creator

news2025/1/10 10:48:01

目录

1、使用Qt Creator新建项目

1.1 新建项目

1.2 选择项目模板

1.3 选择项目路径 

1.4 选择构建系统 

1.5 填写类信息 

1.6 选择语言翻译文件 

1.7 选择编译器 

1.8 选择版本控件系统 

1.9 最终效果 

2、代码解析

2.1 main.cpp 

2.2 widget.h

2.3 widget.cpp

2.4 widget.ui

2.5 new_Qt.pro

2.6 ui_widget.h 

结语 


前言:

        Qt Creator作为Qt的集成开发环境(IDE),在进行图形化界面开发时,开发者主要与其进行交互,所以了解Qt Creator是开发者使用Qt开发最重要的一步。

        打开Qt Creator的界面如下:

1、使用Qt Creator新建项目

1.1 新建项目

        开发界面第一步无疑是新建一个项目,和其他的IDE开发方式一样,点击左上角的文件,然后选择新建文件或项目:

1.2 选择项目模板

         新建项目后会出现选择项目模板:

        其中,这里Application表示该项目是一个常规的Qt应用程序,Qt Widgets Application表示所用的模板是普通窗体模板,基于部件的窗体界⾯程序。值得注意的是:这里的模板选择会导致Qt Creator后续项⽬创建好了之后⽣成不同的基础代码。

1.3 选择项目路径 

        待项目都选择完毕后,下一步就是将该项目赋予项目名称并保存到指定目录下,:

1.4 选择构建系统 

        保存到指定目录下后,需要选择构建系统:

        这里有三个构建工具,分别是:qmake、CMake、Qbs,通常使用默认的qmake即可, qmake的作用是⾃动⽣成makefile⽂件,然后该makefile会自动根据开发者所写的代码生成一份最终的代码,最后运行的是这份最终的代码。

1.5 填写类信息 

        构建工具选择完毕后,就开始选择设置初始界面的父类了,选择如下:

         这里表示的是最初的界面选择继承哪一种父类,有三种父类,分别是:

        1、QMainWindow:主窗⼝类,⼀般⽤于较为复杂界面设计,除了中央控件区界⾯,还包括菜单栏、⼯具栏、 状态栏以及多个可停靠的⼯具对话框等。

        2、QWidget:最简单、最基本的窗体程序,可以理解为就是一块空区域,可以往该区域里面拖拽控件。

        3、QDialog:基于对话框的程序,对话框⼀般⽤于弹窗,也可以⽤于主界⾯显示。对话框是从QWidget继承⽽来的,并丰富了⼀些功能,如模态显示和返回值等。

        上述三个父类的内部继承关系如下:


        另外,这里的Form file勾选非常关键,表示自动生成ui文件,ui文件就是将代码进行界面化。在Qt下,有两种方式可以对界面进行设计:1、通过C++代码的层面进行界面设计。2、直接通过界面的层面,手动拖拽控件进行界面设计。而第二种方式的实现必须要有ui文件的存在,因此Form file的勾选可以方便开发者进行开发。

1.6 选择语言翻译文件 

        该界面如下:

        表示将界面里的文字进行翻译成指定的语言,并生成翻译文件,目前无需过于关注,直接点击下一步即可。 

1.7 选择编译器 

        表示基于哪种编译器进行Qt后续代码的构建,这里编译器的数量跟安装Qt SDK时编译器的选择有关。

1.8 选择版本控件系统 

        最后选择版本控件系统,比如想把代码提交到gitee, 可以在此处选择git作为版本控制系统,也可以不选择:

         点击完成,表示一个项目被真正的创建出来。

1.9 最终效果 

        点击左下角的运行按钮:

        最终可以看到一个界面,这就是最初的界面,开发的工作就是往这里界面上添加各种控件。

2、代码解析

2.1 main.cpp 

#include "widget.h"

#include <QApplication>

int main(int argc, char *argv[])
{
    QApplication a(argc, argv);
    Widget w;
    w.show();
    return a.exec();
}

        1、编写Qt图形化界面程序时,QApplication对象是必须存在的,他参与管理界面程序。

        2、w对象表示窗口界面,只不过在代码中用类的形式体现出来。他继承QWidget,而QWidget就是刚刚在填写类信息时确认的。

        3、w.show()表示展示出这个界面,这也是为什么运行程序后可以看到生成了一个界面并且show这个方法也是QWidget提供的。

        4、exec表示事件循环,因为用户打开一个界面肯定要对该界面进行操作,因此该界面必须是一个循环,且在循环中可以对用户的操作进行处理反馈。

2.2 widget.h

#ifndef WIDGET_H
#define WIDGET_H

#include <QWidget>

QT_BEGIN_NAMESPACE
namespace Ui { class Widget; }
QT_END_NAMESPACE

class Widget : public QWidget
{
    Q_OBJECT

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

private:
    Ui::Widget *ui;
};
#endif // WIDGET_H

        1、Q_OBJECT是一个宏,展开后会生成一大批代码,作用是实现Qt中”信号与槽“的机制。

        2、namespace Ui { class Widget; }表示在命名空间内有一个类Widget,他才是ui界面的类主体,注意此处的Widget和外部的Widget是两个类。

        3、Ui::Widget *ui;ui是一个指针,他指向界面类,所以可以在main函数中使用w对象打印出界面,原因就在于这个指针。他和form file密切相关。

        4、可以从继承关系看出Widget是继承QWidget。

        5、这里Widget的构造函数的形参是一个QWidget *指针,他表示把该当前控件挂到对象树中,对象树的作用是在回收资源时会自动清理树上的控件资源,无需开发者手动释放这些控件资源。

2.3 widget.cpp

#include "widget.h"
#include "ui_widget.h"

Widget::Widget(QWidget *parent)
    : QWidget(parent)//用parent指针完成了对QWidget的构造函数调用
    , ui(new Ui::Widget)//初始化ui指针
{
    ui->setupUi(this);//传的是当前类的地址,目的就是让界面可以访问到当前类
}

Widget::~Widget()
{
    delete ui;
}

         1、可以把ui->setupUi看成是将ui界面和widget关联起来,后续在widget下进行的操作就可以映射到最终的界面上。

2.4 widget.ui

        此时再次点击编辑选项,则该界面会变成一堆代码:

        即widget.ui这个文件本质上也是代码,只不过会被QT Designer识别成界面的形式。并且这些的代码格式是XML格式,他用标签来表示数据,每个标签的具体含义由程序员自己定义。 

2.5 new_Qt.pro

        .pro文件搭配qmake就能自动根据该项目下的文件去构建出一个最终的文件(有点类似makefile的作用)。

2.6 ui_widget.h 

        在widget.cpp的头文件中可以发现有一个ui_widget.h文件,打开该文件就可以看到setupUi方法,并且可以看到更多界面的相关细节:

结语 

        以上就是关于Qt Creator的使用与认识,总得来说新建项目并不复杂,复杂的地方在于新建项目生成的文件和界面之间的逻辑关系,Qt采用了面向对象思想,将继承观念发挥到了极致,这也导致了代码之间的逻辑更复杂。

        最后如果本文有遗漏或者有误的地方欢迎大家在评论区补充,谢谢大家!!  

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

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

相关文章

[SDK] -模态对话框 和 非模态对话框

前言 各位师傅大家好&#xff0c;我是qmx_07&#xff0c;今天给大家讲解对话框的相关知识点&#xff0c;就此SDK学习告一段落&#xff0c;之后会更新相关项目内容 创建对话框 项目->添加 ->资源->Dialog->修改对话框ID->拖拉尺寸设置对话框大小 通过菜单绑定…

多通道电源测试设备怎么测试多路电源?

为了提升多路电源模块的测试效率和精度&#xff0c;NSAT-8000多通道ATE自动化测试设备持续迭代创新&#xff0c;旨在精准检测电源每个通道的性能指标&#xff0c;判断电源质量是否合格。 一、测试系统结构 二、测试设备 常用的测试电源的仪器主要有示波器、数字万用表、电子负载…

Android app广告变现广告预算来源有哪些?

APP开发者想要通过广告变现实现收益的最大化&#xff0c;首先要了解广告预算来源有哪些&#xff1f; 1、Push 推送广告 通过推送消息到用户设备通知栏上展示广告。 2、第三方 SDK 广告 很多应用都会集成第三方广告平台&#xff0c;比如 AdMob、Facebook Audience Network、…

ESP32-S3百度文心一言大模型AI语音聊天助手(支持自定义唤醒词训练)【手把手非常详细】【万字教程】

简介 此项目主要使用ESP32-S3实现一个AI语音聊天助手&#xff0c;可以通过该项目熟悉ESP32-S3 arduino的开发&#xff0c;百度语音识别&#xff0c;语音合成API调用&#xff0c;百度文心一言大模型API的调用方法&#xff0c;音频的录制及播放&#xff0c;SD卡的读写&#xff0c…

SAP自建表log功能开启

1、SE11下进入“技术设置”&#xff0c;勾选“日志更改” 2、RZ10修改系统参数 rec/clientALL, 或rec/client000&#xff08;客户端号&#xff0c;多个客户端使用“&#xff0c;”分割。激活参数文件 没有这个参数的话新增一个 修改了SAP系统参数文件DEFAULT.PFL需要重启SAP…

【ESP-IDF FreeRTOS】软件定时器

除了ESP-IDF中的软硬件定时器&#xff0c;我们还可以使用FreeRTOS中的软件定时器&#xff0c;它是基于Tick的定时器。不过我一般不用&#xff0c;因为有ESP-IDF的定时器了嘛&#xff0c;但还是介绍一下。 首先包含头文件。 #include "freertos/timers.h" 接着我们…

N2011A叉车限速器如何实现超速报警且强制限速的

叉车安装限速器是对厂区叉车控制行驶速度常见的一种方式&#xff0c;但限速器真的能限速吗&#xff1f; 九盾N2011A叉车限速器是采取无线传感器的方式&#xff0c;相比传统的限速器&#xff0c;需要前桥打孔攻牙&#xff0c;稍有不慎就打断&#xff0c;安装麻烦耗工时&#xf…

2024年提升转化率的10个最佳弹窗软件解决方案

无论你是喜欢还是讨厌它们&#xff0c;弹窗通知并不一定都是坏的。当然&#xff0c;大多数网站访问者并不愿意被横幅打扰&#xff08;更糟糕的是那种自动播放音频的视频&#xff09;。不过&#xff0c;你有没有想过只在他们快要离开你的网站时才显示弹窗&#xff1f;使用退出意…

FP7127 / FP7128:LED舞台灯降压方案 RGB调光 智能调光模块

前言&#xff1a; 舞台灯作为一种应用于文化娱乐场所的灯具&#xff0c;用来营造环境、渲染氛围&#xff0c;在舞台上突出中心人物、塑造演员形象&#xff0c;在文化场馆&#xff0c;如博物馆等的场所&#xff0c;突出展品细节。根据灯光用途和适用类型&#xff0c;舞台灯可以…

【F的领地】项目拆解:百家号批量搬运掘金 | 搬运类项目核心思路分享

【F的领地】项目拆解&#xff1a;百家号批量搬运掘金 项目介绍 百家号批量搬运掘金是之前老百家号项目的一种新玩法&#xff0c;操作简单。 只需会操作电脑和手机即可&#xff0c;无脑搬运就行&#xff0c;玩法是批量搬运视频&#xff0c;用软件去重后在百家号发布。 然后是…

Miracast/WifiDisplay开发相关的深入调研分析-android投屏实战开发

Miracast/WifiDisplay概念介绍 Miracast Miracast是由Wi-Fi联盟于2012年所制定&#xff0c;以Wi-Fi直连&#xff08;Wi-Fi Direct&#xff09;为基础的无线显示标准。支持此标准的消费性电子产品&#xff08;又称3C设备&#xff09;可透过无线方式分享视频画面&#xff0c;例如…

Linux和C语言(Day09)

一、学习内容 指针 指针的概念 什么是内存 内存是计算必不可少的硬件设备&#xff0c;一般说到内存常会说TA多大——M、G、T 内存单位&#xff1a;bit【位&#xff0c;最小单位】 Byte【字节&#xff0c;基本单位】 KB MB GB TB CPU如何从内存取数据 通过内存地址去取 将内存…

全球主流单片机制造商

欧美地区 1、FreescaleNXP&#xff08;飞思卡尔恩智浦&#xff09;&#xff1a;荷兰&#xff0c;主要提供16位、32位MCU。应用范围&#xff1a;汽车电子、LED和普通照明、医疗保健、多媒体融合、家电和电动工具、楼宇自动化技术电机控制、电源和功率转换器、能源和智能电网、自…

数据资产入表(二)|数据要素资产化与数据资产入表路线框架,一文说清“入表”实现步骤

前言 小兵的数据资产入表系列文章第一篇为大家介绍了国内外关于“数据要素市场化”的探索现状以及推进“数据资产入表”的相关政策。想必大家读完第一篇后&#xff0c;已经认识到数据要素市场化是大势所趋&#xff0c;但是数据的特殊性使得其市场化之路比其他生产要素要更加复杂…

Vue3+Django5+REST Framework开发电脑管理系统

前端&#xff1a;Vue3TypeScript 后端&#xff1a;Django5REST Framework 功能介绍 用户管理角色管理菜单管理配件管理仓库管理类型管理电脑管理入库管理出库管理库存管理收发明细管理 界面预览 源码地址&#xff1a;managesystem: 电脑管理系统

亚信安全出席第五届国际反病毒大会 探究AI现代网络勒索治理

近日&#xff0c;第二届网络空间安全&#xff08;天津&#xff09;论坛正式开幕。本届论坛由天津市政府主办&#xff0c;国家计算机病毒应急处理中心、天津市公安局、天津市滨海新区政府承办&#xff0c;国家网络与信息安全信息通报中心协办&#xff0c;围绕“共建网络安全 共治…

MySQL表操作及约束

修改表 重命名&#xff1a; mysql> alter table user1 rename to user; 新增一列 mysql> alter table user add image_path varchar(128) comment 路径 after birthday; mysql> alter table user add image_path varchar(128) comment 路径 after birthday; Query…

火山引擎VeDI核心产品DataTester再进化,A/B大模型应用评测功能上线

更多技术交流、求职机会&#xff0c;欢迎关注字节跳动数据平台微信公众号&#xff0c;回复【1】进入官方交流群 近日&#xff0c;火山引擎A/B测试产品DataTester上线了A/B大模型应用评测功能。此次升级不仅强化了模型上线前的基础能力评测&#xff0c;还新增了针对线上使用场景…

基本数据结构:“树”的简单介绍

树是一种重要的非线性数据结构&#xff0c;它模拟了树这种自然结构&#xff0c;由结点&#xff08;Node&#xff09;和边&#xff08;Edge&#xff09;组成&#xff0c;常用于表示分层关系&#xff08;如文件系统、组织结构等&#xff09;。以下是树的一些基本概念和特性&#…

对浏览器事件循环机制的理解

目录 事件循环宏观理解事件循环异步任务细分宏任务与微任务后的理解结合流程图与代码理解览器事件循环 首先来介绍一些谷歌浏览器的进程与线程。 谷歌浏览器包含五个进程&#xff1a;浏览器主进程、渲染进程、GPU进程、网络进程、插件进程。 其中最重要的渲染进程包含五个线程…