Qt入门之概述

1.1 介绍

  1. Qt:它是一套基于C++的跨平台开发框架,包括GUI、字符串、多线程处理、文件IO、网络IO、3D渲染等
  2. 时间:它诞生于1991年,由Haavard Nord和Eirik Chambe-Eng共同缔造
  3. 发展:历经Qt Company、Nokia、Digia多个公司开发迭代
  4. 版本:由最先的Qt1.40发展到Qt6,其中广为人知的是Qt4、Qt5、Qt6,Qt4基于QWS,Qt5基于QPA,Qt6基于RHI
  5. 特点:开源、跨平台、简单易用(信号和槽作为消息机制)、模块可裁剪、支持cmake、代码优雅、支持反射机制、属性机制、半自动内存管理
  6. 跨平台:嵌入式、PC端、移动端,支持部分RTOS平台
  7. 内存管理:采用QOject对象树机制,父节点管理子节点的生命周期,继承自QObject的类派生的对象析构时会把子节点全部析构掉
  8. 消息机制:Qt开创性的在C++里边发明了信号和槽消息机制,被很多GUI框架借鉴和使用,简易的通信机制使得C++编写GUI不再困难
  9. 反射机制:虽然没有Java那样完备的对象发射,但起码可以动态了解对象的property和method,它是通过大量的宏来实现的,比较适合GUI动态解析
  10. 开源:作为一套open source的框架,它的大部分模块license是GPLv2、GPLv3授权的,有少部分是LGPL授权的

1.2 安装

下面在Windows11环境下安装Qt6,首先,访问Qt官方下载网站,下载在线安装包,这里最新版本为4.7.0

在这里插入图片描述

双击打开程序qt-unified-windows-x64-4.7.0-online.exe,输入Qt Account,没有的话请自行注册,接着点击Next

在这里插入图片描述

Qt开源协议用法及义务页面,主要是GPL协议的规范,了解一下,在两个复选框那里全都选上,然后点击Next

在这里插入图片描述

欢迎页面,没有啥内容,继续Next >

在这里插入图片描述

点击第一个单选框,帮助Qt Creator改进开发中遇到的问题,继续Next >

在这里插入图片描述

安装目录选择,继续Next >

在这里插入图片描述

勾选安装组件,我选了Qt6.6.2及Qt Creator两大组件,这里先安装,以后有需要再根据需要重新配置安装,继续Next >

在这里插入图片描述

查看license,点击勾选框同意相关许可协议,继续Next >

在这里插入图片描述

创建开始菜单,继续Next >

在这里插入图片描述

安装空间提示需要18.36GB的硬盘空间,继续Install

在这里插入图片描述

下载安装中,这里需要比较好的网络连接,需要比较久的时间等待安装完成

在这里插入图片描述

安装完成,继续Next >

在这里插入图片描述

运行Qt Creator程序,点击Finish

在这里插入图片描述

1.3 开发环境

窗口功能

在这里插入图片描述

①:菜单栏

②:功能栏,可以切换不同的功能区域

③:调试运行栏

④:左边栏,由项目栏、文件系统等功能区域组成

⑤:工具栏,各种小功能快捷跳转

⑥:文件编辑器

⑦:调试运行信息输出区域

⑧:代码定位栏

帮助文档

在这里插入图片描述

①:工具栏

②:左侧栏,支持按目录、索引等方式查看

③:文档区域

快捷键

功能按键组合
打开文件Ctrl + O
关闭文件Ctrl + W
关闭所有文件Ctrl + Shift + W
保存所有文件Ctrl + Shift + S
编译所有工程Ctrl + Shift + B
编译当前工程Ctrl + B
运行Ctrl + R
开始调试F5
中断运行F5
单步跳过F10
单步进入F11
单步跳出Shift + F11
切换断点F9
接口帮助F1 + F1(两次F1)
注释代码Ctrl + /
查看粘贴板Ctrl + Shift + V
复制Ctrl + C
粘贴Ctrl + V
剪切Ctrl + X
切换书签Ctrl + M
自动缩进Ctrl + Shift + I
打开左侧栏Alt + 0
打开右侧栏Alt + Shift + 0
上下分割窗口Ctrl + E + 2
左右分割窗口Ctrl + E + 3
窗口复原Ctrl + E + 1
退出软件Ctrl + Q

1.4 最小程序

创建工程

点击文件 -> New Project

在这里插入图片描述

选择工程模板

在这里插入图片描述

填写工程名和路径

在这里插入图片描述

构建工具选择cmake

在这里插入图片描述

源文件命名

在这里插入图片描述

多语言配置,这里暂时用不上多语言,所以不选择

在这里插入图片描述

勾选编译工具链

在这里插入图片描述

版本控制,不需要进行配置,点击完成即可

在这里插入图片描述

工程代码

CMakeLists.txt

cmake_minimum_required(VERSION 3.5)project(HelloQt6 VERSION 0.1 LANGUAGES CXX)set(CMAKE_AUTOUIC ON)
set(CMAKE_AUTOMOC ON)
set(CMAKE_AUTORCC ON)set(CMAKE_CXX_STANDARD 17)
set(CMAKE_CXX_STANDARD_REQUIRED ON)find_package(QT NAMES Qt6 Qt5 REQUIRED COMPONENTS Widgets)
find_package(Qt${QT_VERSION_MAJOR} REQUIRED COMPONENTS Widgets)set(PROJECT_SOURCESmain.cppmain_window.cppmain_window.hmain_window.ui
)if(${QT_VERSION_MAJOR} GREATER_EQUAL 6)qt_add_executable(HelloQt6MANUAL_FINALIZATION${PROJECT_SOURCES})
# Define target properties for Android with Qt 6 as:
#    set_property(TARGET HelloQt6 APPEND PROPERTY QT_ANDROID_PACKAGE_SOURCE_DIR
#                 ${CMAKE_CURRENT_SOURCE_DIR}/android)
# For more information, see https://doc.qt.io/qt-6/qt-add-executable.html#target-creation
else()if(ANDROID)add_library(HelloQt6 SHARED${PROJECT_SOURCES})
# Define properties for Android with Qt 5 after find_package() calls as:
#    set(ANDROID_PACKAGE_SOURCE_DIR "${CMAKE_CURRENT_SOURCE_DIR}/android")else()add_executable(HelloQt6${PROJECT_SOURCES})endif()
endif()target_link_libraries(HelloQt6 PRIVATE Qt${QT_VERSION_MAJOR}::Widgets)# Qt for iOS sets MACOSX_BUNDLE_GUI_IDENTIFIER automatically since Qt 6.1.
# If you are developing for iOS or macOS you should consider setting an
# explicit, fixed bundle identifier manually though.
if(${QT_VERSION} VERSION_LESS 6.1.0)set(BUNDLE_ID_OPTION MACOSX_BUNDLE_GUI_IDENTIFIER com.example.HelloQt6)
endif()
set_target_properties(HelloQt6 PROPERTIES${BUNDLE_ID_OPTION}MACOSX_BUNDLE_BUNDLE_VERSION ${PROJECT_VERSION}MACOSX_BUNDLE_SHORT_VERSION_STRING ${PROJECT_VERSION_MAJOR}.${PROJECT_VERSION_MINOR}MACOSX_BUNDLE TRUEWIN32_EXECUTABLE TRUE
)include(GNUInstallDirs)
install(TARGETS HelloQt6BUNDLE DESTINATION .LIBRARY DESTINATION ${CMAKE_INSTALL_LIBDIR}RUNTIME DESTINATION ${CMAKE_INSTALL_BINDIR}
)if(QT_VERSION_MAJOR EQUAL 6)qt_finalize_executable(HelloQt6)
endif()

main.cpp

#include "main_window.h"#include <QApplication>int main(int argc, char *argv[])
{QApplication a(argc, argv);MainWindow w;w.show();return a.exec();
}

main_window.cpp

#include "main_window.h"
#include "./ui_main_window.h"MainWindow::MainWindow(QWidget *parent): QMainWindow(parent), ui(new Ui::MainWindow)
{ui->setupUi(this);
}MainWindow::~MainWindow()
{delete ui;
}

main_window.h

#ifndef MAINWINDOW_H
#define MAINWINDOW_H#include <QMainWindow>QT_BEGIN_NAMESPACE
namespace Ui {
class MainWindow;
}
QT_END_NAMESPACEclass MainWindow : public QMainWindow
{Q_OBJECTpublic:MainWindow(QWidget *parent = nullptr);~MainWindow();private:Ui::MainWindow *ui;
};
#endif // MAINWINDOW_H

main_window.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>17</height></rect></property></widget><widget class="QStatusBar" name="statusbar"/></widget><resources/><connections/>
</ui>

直接运行效果

在这里插入图片描述

1.5 术语

  • GUI:graphic user interface,图形用户界面
  • property:对象的属性,如成员变量
  • method:对象的方法,如成员函数
  • open source:开源
  • GPL:general public license,通用公共许可证
  • LGPL:lesser general public license,宽松的通用公共许可证
  • QWS:Qt Window System,Qt窗口系统
  • QPA:Qt Platform Abstraction,Qt平台抽象
  • RHI:Qt Rendering Hardware Interface,Qt渲染硬件接口

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

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

相关文章

Seata 2.x 系列【9】事务会话存储模式

有道无术&#xff0c;术尚可求&#xff0c;有术无道&#xff0c;止于术。 本系列Seata 版本 2.0.0 本系列Spring Boot 版本 3.2.0 本系列Spring Cloud 版本 2023.0.0 源码地址&#xff1a;https://gitee.com/pearl-organization/study-seata-demo 文章目录 1. 概述2. 存储模…

ubuntu安装docker的详细教程

检查卸载老版本docker ubuntu下自带了docker的库&#xff0c;不需要添加新的源。 但是ubuntu自带的docker版本太低&#xff0c;需要先卸载旧的再安装新的。 注&#xff1a;docker的旧版本不一定被称为docker&#xff0c;docker.io 或 docker-engine也有可能&#xff0c;所以卸…

有关整数和浮点数在内存中存储

1. 整数在内存中的存储 整数的2进制表⽰⽅法有三种&#xff0c;即原码、反码和补码 三种表⽰⽅法均有符号位和数值位两部分&#xff0c;符号位都是⽤0表⽰“正”&#xff0c;⽤1表⽰“负”&#xff0c;⽽数值位最 ⾼位的⼀位是被当做符号位&#xff0c;剩余的都是数值位。 正…

常用芯片学习——BME280芯片

BME280 温湿度气压传感器 芯片介绍 BME280是基于成熟传感原理的组合数字湿度、压力和温度传感器。该传感器块采用极为紧凑的金属盖LGA封装&#xff0c;占地面积仅为2.5x2.5mm2&#xff0c;高度为0.93mm。该传感器提供I2C以及SPI接口。它的小尺寸和低功耗允许在电池驱动的设备…

TCP-IP 知识汇总

开放式系统互联模型------国际化标准组织ISO提出----协议组&#xff08;协议模型&#xff09; 应用层&#xff1a;接收用户数据&#xff0c;人机交互的接口 表示层&#xff1a;将编码转换为二进制&#xff08;加密、解密&#xff09;---统一格式 会话层&#xff1a;针对传输…

springboot279基于javaweb的影院订票系统的设计与实现

影院订票系统 摘 要 现代经济快节奏发展以及不断完善升级的信息化技术&#xff0c;让传统数据信息的管理升级为软件存储&#xff0c;归纳&#xff0c;集中处理数据信息的管理方式。本影院订票系统就是在这样的大环境下诞生&#xff0c;其可以帮助管理者在短时间内处理完毕庞大…

2024.4.17周报

目录 摘要 Abstract 文献阅读&#xff1a;耦合时间和非时间序列模型模拟城市洪涝区洪水深度 现有问题 提出方法 创新点 XGBoost和LSTM耦合模型 XGBoost算法 ​编辑 LSTM&#xff08;长短期记忆网络&#xff09; 耦合模型 研究实验 数据集 评估指标 研究目的 洪水…

Orbit 使用指南 03 | 与刚体交互 | Isaac Sim | Omniverse

如是我闻&#xff1a; “在之前的指南中&#xff0c;我们讨论了独立脚本&#xff08; standalone script&#xff09;的基本工作原理以及如何在模拟器中生成不同的对象&#xff08;prims&#xff09;。在指南03中&#xff0c;我们将展示如何创建并与刚体进行交互。为此&#xf…

48、C++/堆区动态内存管理 类中特殊成员函数学习20240313

一、设计一个Per类&#xff0c;类中包含私有成员:姓名、年龄、指针成员身高、体重&#xff0c;再设计一个Stu类&#xff0c;类中包含私有成员:成绩、Per类对象p1&#xff0c;设计这两个类的构造函数、析构函数和拷贝构造函数。 代码&#xff1a; #include <iostream>us…

走进volatile的世界,探索它与可见性,有序性,原子性之间的爱恨情仇!

写在开头 在之前的几篇博文中&#xff0c;我们都提到了 volatile 关键字&#xff0c;这个单词中文释义为&#xff1a;不稳定的&#xff0c;易挥发的&#xff0c;在Java中代表变量修饰符&#xff0c;用来修饰会被不同线程访问和修改的变量&#xff0c;对于方法&#xff0c;代码…

Arduino RP2040 LittleFS的使用介绍

Arduino RP2040 LittleFS的使用 &#x1f4cc;RP2040基于Earle F. Philhower, III的开发核心固件&#xff1a;https://github.com/earlephilhower/arduino-pico/releases/download/global/package_rp2040_index.json&#x1f388;相关开发文档在线说明&#xff1a;https://ardu…

每日一题——LeetCode2789.合并后数组中的最大元素

方法一 倒序遍历&#xff1a; 将数组倒序过来看&#xff0c;就是从最后一个数开始&#xff0c;如果它前面一个数小于等于它就可以把前面一个数吃掉同时加上前一个数的值形成一个新的数&#xff0c;如果碰到一个更大的数就吃不动了&#xff0c;那么就换那个更大的数去继续吃前面…

ts版本微信小程序在wxml保存文件不刷新页面的解决办法

将project.config.json中的skylineRenderEnable改为false "skylineRenderEnable": false

惯导系统静止初始化方法与代码实现并在gazebo中测试

惯导系统静止初始化方法与代码实现并在gazebo中测试 前言静止初始化方法惯导静止初始化实现代码在gazebo中进行测试 前言 在进行GPS加IMU的组合导航或者Lidar加IMU的组合导航时&#xff0c;用EKF或者ESKF的滤波方法时&#xff0c;需要提前知道惯导的测量噪声、初始零偏、重力方…

POJO简介

文章目录 简介POJO与ELB的区别POJO真正的意思 常见的POJO类DTODAOPOVOEntity 简介 什么是POJO&#xff1f;POJO&#xff08;Plain Ordinary Java Object&#xff09;简单的Java对象&#xff0c;实际就是普通JavaBeans&#xff0c;是为了避免和EJB(EJB是Enterprise Java Beans技…

Ubuntu 22.04 Nvidia Audio2Face Error:Failed to build TensorRT engine

背景 1.在Ubuntu22.04上安装Audio2Face后启动&#xff0c;嘴形不会实时同步。控制台显示如【图一】&#xff1a; 【图一】 2.log日志如下: Error: Error during running command: [‘/home/admin/omniverse/libs/deps/321b626abba810c3f8d1dd4d247d2967/exts/omni.audio2fac…

【论文阅读】DiffSpeaker: Speech-Driven 3D Facial Animation with Diffusion Transformer

DiffSpeaker: 使用扩散Transformer进行语音驱动的3D面部动画 code&#xff1a;GitHub - theEricMa/DiffSpeaker: This is the official repository for DiffSpeaker: Speech-Driven 3D Facial Animation with Diffusion Transformer paper&#xff1a;https://arxiv.org/pdf/…

clickhouse学习笔记01(小滴课堂)

老王经历-数据库架构演变历史 你是否能分清OLTP和OLAP系统 急速掌握-数据库里面行存储和列式存储 新一代列式存储ClickHouse介绍和应用场景说明 Linux服务器容器化部署ClickHouse实战 记得要在安全组里配置开放端口号。 到这我们就安装完了。 简单使用&#xff1a; 创建你的第…

鲲鹏920集成100G网卡RDMA测试说明

1、背景介绍 目前鲲鹏920处理器内集成了两个100G网卡&#xff0c;支持RDMA&#xff08;Roce V2&#xff09;&#xff0c;说明如下 为了测试网卡性能&#xff0c;需要进行RDMA测试&#xff0c;两块鲲鹏920的板卡通过盛科的8180 100G交换芯片实现交换功能。 盛科8180芯片介绍如下…

2.亿级积分数据分库分表:增量数据同步之代码双写,为什么没用Canal?

1.亿级积分数据分库分表&#xff1a;总体方案设计 上一篇博客中写了一下积分数据分库分表的总体方案设计&#xff0c;里面说了采用应用程序代码双写的方式实现的增量数据同步&#xff0c;本篇就对这一块进行一些细化的介绍&#xff0c;包括&#xff1a; 为什么不用Canal监听数…