C++客户端Qt开发——开发环境

news2024/9/25 9:35:09

一、QT开发环境

1.安装三个部分

①C++编译器(gcc,cl.exe……)

②QT SDK

SDK-->软件开发工具包

比如,windows版本QT SDK里已经内置了C++的编译器(内置编译器是mingw,windows版本的gcc/g++)

③QT的集成开发环境(IDE)

  • 官方提供的QT Creator

最容易入门,最容易上手的方式,开箱即用,虽然QT Creator使用过程中存在不少bug(有些bug非常影响使用体验,但整体来说用起来挺方便,比较适合初学者)

  • Visual Studio

功能更强,但是需要额外的配置更多,更容易出错,有些公司开发商业QT的时候可能会使用VS,需要给VS安装插件,并且需要把QT SDK使用VS的编译器重新编译(现在也方便一些,有预编译好的版本)

  • Eclipse

Eclipse并非只是Java IDE,本身是一个IDE平台,可以搭配不同的插件构成不同的IDE

2.QT SDK的下载和安装

官网地址:Index of /archive/qt

最好选择一个比较稳定的版本

安装过程中选这个,QT SDK中内置的C++编译器

安装完成后配置环境(不是必须的)

找到安装目录,依次点击

把这个环境添加到系统的环境变量中

①QT自带的离线版本的官方文档

②QT设计师,图形化的设计界面的工具,通过拖拽空间的方式来快速生成界面,会经常搭配QTCreator来使用

③QT语言家,作用是对国际化进行支持,有的时候,写的程序要和国际接轨,允许单独创建一个语言配置文件,把界面上需要用到的各种文字都配置到文件中,并且在文件中提前把各种语言的翻译都配置进去,实现一键切换语言的效果

④命令行终端

⑤QT Creator,QT的集成开发工具

3.QT Creator

①创建新项目

新建项目,应用程序如果使用QT写一个GUI程序,就应该选择Application

构建系统,通过QT写的程序,涉及到一系列的“元编程”技术,通过代码来生成代码

QT框架会在编译的时候,自动调用一系列的生成工具,基于自己写的代码,生成一系列的其他C++代码,最终编译的代码,也是最后生成的这些代码

qmake:是老牌的qt构建工具

cmake:并非是qt专属,很多的开源项目都会使用cmake

Qbs:新一代的qt构建工具(用得少)

使用Qt Creator创建项目,会自动生成一些代码出来,生成的代码就包含一个类,此处就是要选择这个自动生成的类的父类是谁,QT中内置的类都是以Q前缀开头的

QMainWindows--完整的应用程序窗口

QWidget--表示一个控件(窗口上的一个具体元素:输入框,按钮,下拉框,单选按钮复选按钮等)

QDialog--表示一个对话框

自动变为widget名称,其中form file非常关键

Qt中创建图形化界面的程序有两种方式:

  1. 直接通过C++代码的方式创建界面
  2. 通过form file,以图形化的方式来生成界面

此时,就可以使用Qt Designer或者直接使用Qt Creator来编辑这个ui文件,从而以图形化的方式快速方便的生成图形界面

选择翻译文件,暂时不关注,这部分和国际化相关

选择一下基于哪个编译器的Qt SDK来构建后续代码

②项目自动生成的代码

#include "mywidget.h"

#include <QApplication>

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

QApplication a(argc,argv);编写一个Qt的图形化界面程序,一定需要有QApplication对象

Mywidget w;Widget在创建项目的时候,填写了生成的类名,创建一个控件对象

.show()方法让空间显示出来

.hide()方法让空间隐藏

这些方法都是Widget的父类QWidget提供的

return a.exec();exec表示让程序执行起来(与linux中的exec没有任何关系,只是名字恰好一样)

#ifndef MYWIDGET_H
#define MYWIDGET_H
// 表示保证头文件只被包含一次,更推荐#pragma once

#include <QWidget>

QT_BEGIN_NAMESPACE
namespace Ui { class MyWidget; }
QT_END_NAMESPACE

// 创建项目时选择的父类,Qt SDK内置的,
// 要想使用这个类,就要包含这个头文件,
// 在Qt中,使用的类的头文件名称一样
class MyWidget : public QWidget 
{
    Q_OBJECT // 是Qt内置的宏,宏本质是文本替换
    // 展开后,会生成一大堆代码,Qt中有一个非常核心的机制,“信号和槽”
    // 如果某个类想使用“信号和槽”,就需要引入这个宏

public:
    MyWidget(QWidget *parent = nullptr); 
    // Qt中引用了“对象树”机制,对象给挂到对象树上
    // 往树上挂的时候就需要指定父节点(对象树就是一个普通的N叉树,不是二叉树)
    ~MyWidget();

private:
    Ui::MyWidget *ui; // 和form file密切相关
};
#endif // MYWIDGET_H

#ifndef MYWIDGET_H

#define MYWIDGET_H

表示保证头文件只被包含一次,更推荐#pragma once

class MyWidget : public QWidget 创建项目时选择的父类,Qt SDK内置的,要想使用这个类,就要包含这个头文件,在Qt中,使用的类的头文件名称一样

Q_OBJECT 是Qt内置的宏,宏本质是文本替换,展开后,会生成一大堆代码,Qt中有一个非常核心的机制,“信号和槽”,如果某个类想使用“信号和槽”,就需要引入这个宏

MyWidget(QWidget *parent = nullptr); Qt中引用了“对象树”机制,对象给挂到对象树上,往树上挂的时候就需要指定父节点(对象树就是一个普通的N叉树,不是二叉树)

Ui::MyWidget *ui; 和form file密切相关

#include "mywidget.h"
#include "ui_mywidget.h" //form file 被qmake生成的头文件

MyWidget::MyWidget(QWidget *parent)
    : QWidget(parent)
    , ui(new Ui::MyWidget)
{
    ui->setupUi(this);
}

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

#include "ui_mywidget.h"form file 被qmake生成的头文件

ui(new Ui::MyWidget){ ui->setupUi(this); }form file 生成的界面和当前widget关联起来

③form file文件 .ui

双击打开.ui文件,此时Qt Creator就会调用Qt Desiger,打开ui文件,图形化的界面编辑器

左侧就是Qt中内置的控件,拖拽左侧的空间到程序窗口中,就可以创建出具体的界面了

右侧黄色背景的事编辑属性,每个控件都有很多属性,会影响到控件具体行为

此时点击编辑按钮,就会看到.ui文件的具体内容

.proQt项目的工程文件,也是qmake工具构架时候的重要依据

QT += core gui要引入的Qt的模块,后面学习到一些内容的时候可能会修改这里

SOURCES += \
    main.cpp \
    mywidget.cpp

HEADERS += \
    mywidget.h

FORMS += \
    mywidget.ui

描述了当前项目中,参与构建的文件都有啥,编译器要编译哪些文件,这个地方不需要手动修改,Qt Creator会自动维护好

.pro 类似于linux中的Makefile

④ 中间文件

构建过程中会产生一些中间文件

右键点击.pro文件,然后点击在Explorer中显示,返回上一级会发现有一个同级文件夹

在运行一次程序后,就会在项目目录并列的地方,多出来一个“build-xxxxx”目录,这个目录里面就是该项目运行过程中,产生的一些临时文件(下图是因为创建的时候选了git)

编译Qt程序,还是会用到Makefile,但是不需要手动写,而是编译器会自动生成

ui_mywidget.hwidget.ui xml生成的.h文件

Empty.exe这就是最终生成的可执行程序,如果直接运行和在Qt Creator中运行时效果相同

.pro文件配置项:

  • TARGET: 指定生成的可执行文件的名称。
  • TEMPLATE: 指定项目的类型,例如应用程序(app)、库(lib)等。
  • SOURCES: 指定源代码文件的列表。
  • HEADERS: 指定头文件的列表。
  • LIBS: 指定需要链接的库。
  • QT: 指定项目所需的Qt模块。
  • DEFINES: 定义预处理宏。
  • QMAKE_CXXFLAGS: 指定编译器选项。
  • win32/unix/macx: 平台特定的配置,用于针对不同的操作系统设置特定的编译选项。

通过编辑.pro文件,开发者可以定制项目的构建过程,包括指定源文件、链接库、定义宏、设置编译选项等。在Qt项目中,.pro文件的灵活性和可定制性使得开发者能够更好地管理项目的构建和依赖关系。

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

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

相关文章

KnoBo:医书学习知识,辅助图像分析,解决分布外性能下降和可解释性问题

KnoBo&#xff1a;从医书中学习知识&#xff0c;辅助图像分析&#xff0c;解决分布外性能下降问题 提出背景KnoBo 流程图KnoBo 详解问题构成结构先验瓶颈预测器参数先验 解法拆解逻辑链对比 CLIP、Med-CLIPCLIPMed-CLIPKnoBo 训练细节预训练过程OpenCLIP的微调 构建医学语料库文…

说说执行一条查询SQL语句时,期间发生了什么?

执行一条查询SQL语句时&#xff0c;期间发生了什么&#xff1f; 前言说说执行一条查询SQL语句时&#xff0c;发生了什么&#xff1f;连接器权限验证断开连接长连接 查询缓存查询缓存的问题 解析器词法分析语法分析 执行 SQL预处理器优化器执行器主键索引查询全表扫描索引下推 总…

轻薄鼠标的硬核选购攻略,很多人都在“高性价比”鼠标上栽跟头了

轻薄款设计的鼠标是目前鼠标市场的出货大头&#xff0c; 也是价格最卷的一类鼠标。 比游戏鼠标或许更卷一些。 这和当前的移动办公趋势关系很大。 这类鼠标主要跟笔记本和iPad搭配。 核心的使用场景是办公。 因此轻薄和静音是这类鼠标的核心卖点。 同时用户并不愿意付出太…

代码随想录算法训练营第三十二天|1049.最后一块石头的重量II、494.目标和、474.一和零

1049.最后一块石头的重量II 有一堆石头&#xff0c;每块石头的重量都是正整数。 每一回合&#xff0c;从中选出任意两块石头&#xff0c;然后将它们一起粉碎。假设石头的重量分别为 x 和 y&#xff0c;且 x < y。那么粉碎的可能结果如下&#xff1a; 如果 x y&#xff0c;那…

期货交易记录20240713

文章目录 期货交易系统构建步骤一、选品二、心态历练三、何时开仓3.1、开仓纪律3.2、开仓时机3.3、开仓小技巧 四、持仓纪律五、接下来的计划 2024年7月13号&#xff0c;期货交易第5篇记录。 交易记录&#xff1a;半个月多没记录了&#xff0c;这段时间分别尝试做了菜粕、棕榈油…

9.6 栅格图层符号化唯一值着色渲染

文章目录 前言多波段彩色渲染唯一值着色QGis设置为唯一值着色二次开发代码实现唯一值着色 总结 前言 介绍栅格图层数据渲染之唯一值着色渲染说明&#xff1a;文章中的示例代码均来自开源项目qgis_cpp_api_apps 多波段彩色渲染唯一值着色 以“with_color_table.tif”数据为例…

【嵌入式DIY实例-ESP8266篇】-LCD ST7789显示DS1307 RTC时间数据

LCD ST7789显示DS1307 RTC时间数据 文章目录 LCD ST7789显示DS1307 RTC时间数据1、硬件准备与接线2、代码实现本文将介绍如何使用 ESP8266 NodeMCU 板和 DS1307 RTC 集成电路构建简单的实时时钟和日历 (RTCC),其中时间和日期打印在 ST7789 TFT 显示模块上。 ST7789 TFT 模块包…

Open-TeleVision——通过VR沉浸式感受人形机器人视野:兼备远程控制和深度感知能力

前言 7.3日&#xff0c;我司七月在线(集AI大模型职教、应用开发、机器人解决方案为一体的科技公司)的「大模型机器人(具身智能)线下营」群里的一学员发了《Open-TeleVision: Teleoperation with Immersive Active Visual Feedback》这篇论文的链接&#xff0c;我当时快速看了一…

UML/SysML建模工具更新情况(2024年7月)(1)

DDD领域驱动设计批评文集 做强化自测题获得“软件方法建模师”称号 《软件方法》各章合集 工具最新版本&#xff1a;Enterprise Architect 17.0 BETA 更新时间&#xff1a;2024年7月2日 工具简介 性价比很高&#xff0c;目前最流行的UML建模工具。还包含需求管理、项目估算…

AIGC专栏13——ComfyUI 插件编写细节解析-以EasyAnimateV3为例

AIGC专栏13——ComfyUI 插件编写细节解析-以EasyAnimateV3为例 学习前言什么是ComfyUI相关地址汇总ComfyUIEasyAnimateV3 节点例子复杂例子-以EasyAnimateV3为例节点文件必要库的导入载入模型节点定义Image to Video节点定义节点名称映射 __init__.py文件插件导入comfyUI 学习前…

被动的机器人非线性MPC控制

MPC是一种基于数学模型的控制策略&#xff0c;它通过预测系统在未来一段时间内的行为&#xff0c;并求解优化问题来确定当前的控制输入&#xff0c;以实现期望的控制目标。对于非线性系统&#xff0c;MPC可以采用非线性模型进行预测和优化&#xff0c;这种方法被称为非线性模型…

JS实现:统计字符出现频率/计算文字在文本中的出现次数

要实现这个功能&#xff0c;JavaScript 一个非常强大的方法&#xff0c;那就是reduce() reduce() 它用于将数组的所有元素减少到一个单一的值。这个值可以是任何类型&#xff0c;包括但不限于数字、字符串、对象或数组。 reduce() 方法接收一个回调函数作为参数&#xff0c;这个…

【C++】设计一套基于C++与C#的视频播放软件

在开发一款集视频播放与丰富交互功能于一体的软件时&#xff0c;结合C的高性能与C#在界面开发上的便捷性&#xff0c;是一个高效且实用的选择。以下&#xff0c;我们将概述这样一个系统的架构设计、关键技术点以及各功能模块的详细实现思路。 一、系统架构设计 1. 架构概览 …

截图神器Snipaste

这是我作为测试这么些年来用过的最好用的截图工具&#xff0c;让你将截图贴回到屏幕上&#xff0c;最好用的截图工具&#xff0c;推荐给同事深受好评。 snipaste是一个简单但强大的截图工具&#xff0c;也可以让你将截图贴回到屏幕上。下载打开Snipaste,按下F2来开始截图&…

【已解决】sudo: apt: command not found 或者apt-get: command not found解决方案

一、问题 在CentOS7.5运行apt-get install supervisor遇到如下报错 二、原因 CentOS的软件安装工具不是apt-get &#xff0c;而是yum&#xff0c;应该使用如下命令&#xff1a; yum install supervisor 后面命令换为yum就可以了 三、扩展&#xff1a; 一般来说linux系统…

MVC架构

MVC架构 MVC架构在软件开发中通常指的是一种设计模式&#xff0c;它将应用程序分为三个主要组成部分&#xff1a;模型&#xff08;Model&#xff09;、视图&#xff08;View&#xff09;和控制器&#xff08;Controller&#xff09;。这种分层结构有助于组织代码&#xff0c;使…

AR0132AT 1/3 英寸 CMOS 数字图像传感器可提供百万像素 HDR 图像处理(器件编号包含:AR0132AT6R、AR0132AT6C)

AR0132AT 1/3 英寸 CMOS 数字图像传感器&#xff0c;带 1280H x 960V 有效像素阵列。它能在线性或高动态模式下捕捉图像&#xff0c;且带有卷帘快门读取。它包含了多种复杂的摄像功能&#xff0c;如自动曝光控制、开窗&#xff0c;以及视频和单帧模式。它适用于低光度和高动态范…

《GroupViT: Semantic Segmentation Emerges from Text Supervision》论文解读

会议&#xff1a;CVPR 年份&#xff1a;2022 代码&#xff1a;https://github.com/NVlabs/GroupViT 研究背景与动机&#xff1a; 传统深度学习系统中&#xff0c;图像区域的Grouping通常是隐式通过像素级识别标签的自上而下监督来实现的。作者提出将Grouping机制重新引入深…

本地部署,AnimeGANv3: 将现实世界照片转化为动漫风格

目录 引言 技术背景 架构与原理 实验结果与分析 应用实例 本地部署 运行结果 Photo to Hayao Style Photo to Shinkai Style more suprise 支持多种风格 结论 参考文献 GitHub - TachibanaYoshino/AnimeGANv3: Use AnimeGANv3 to make your own animation works, …

在 PostgreSQL 里如何处理数据的跨库关联查询性能优化?

文章目录 一、了解跨库关联查询的挑战&#xff08;一&#xff09;网络延迟&#xff08;二&#xff09;数据量庞大&#xff08;三&#xff09;索引不一致&#xff08;四&#xff09;数据库配置差异 二、优化策略&#xff08;一&#xff09;合理设计数据库架构&#xff08;二&…