【Windows编程】windows窗口创建过程详解

article/2025/10/29 19:48:38

文章目录

  • 前言
  • 1 应用程序的分类
  • 2 应用程序分类的对比
  • 3 编译工具
  • 4 windows库文件和头文件
  • 5 WinMain函数和MessageBox函数初始
  • 6 窗口类
  • 7 窗口类的分类
  • 8 注册窗口类函数
  • 9 注册窗口类的结构体
  • 10 注册全局和局部窗口类
  • 11 创建窗口的函数
  • 12 创建一个windows的过程步骤
  • 13 创建一个子窗口的方法
  • 14 消息的概念及其作用
  • 15 浅谈GetMessage 函数
  • 16 浅谈 TranslateMessage 函数
  • 17 使用消息
  • 18 消息循环的基本原理
  • 19 发送消息
  • 20 消息的分类
  • 21 消息队列
  • 22 消息队列分类
  • 23 消息和消息队列的关系
  • 24 GetMessage函数内部执行过程

前言

搞windows开发,必须熟悉vs自己的开发工具,这会提高你的开发效率;我用的是vs2013;感觉不错;

1 应用程序的分类

在windows平台上大致有一下三类:

在这里插入图片描述


其中,dos程序本身没有窗口,其实它的意思是:控制台程序自己并不会创建窗口,而DOS窗口仅仅是dos程序本身向OS借过来的一个窗口,也就是说,dos窗口是OS创建的;

窗口程序:自己拥有窗口的意思就是你自己程序本身就是可以创建一个窗口,比如你的QQ界面啥的这样


2 应用程序分类的对比

在这里插入图片描述


注意:动态库不能虽然有入口函数,但是不能够独立的执行;


3 编译工具

在这里插入图片描述


其中rc.exe是转呗编译资源文件的,这是在windows独有的,一般我们的窗口资源,图片资源,菜单资源,画饼画刷等资源都是在资源文件中,然后也需要进行编译;最后链接到可执行文件里;

这些编译工具都是可以找到的,在你的开发工具VS的路径中:
我的就在这里,可能你们会有 12.0 是11.0 13.0等不一样的差别,并且我存放在C盘,你们要看开发环境在哪个盘了;

C:\Program Files (x86)\Microsoft Visual Studio 12.0\VC\bin

在这里插入图片描述


4 windows库文件和头文件

windows的源码API是不公开的,只提供动态库让我们去使用,只要我们有windows的库文件头文件就可以使用windowsAPI函数了;
在这里插入图片描述


在这里插入图片描述


其实我们开发时候,使用windows.h头文件就可以直接调用windowsAPI,并不需要专门包含其他windef.h winbase.h 。。。。。等头文件;


5 WinMain函数和MessageBox函数初始

在这里插入图片描述


WinMain函数:windows编程时候的入口函数
hInstance :当前实例句柄,可以理解:可以找到一块内存的变量,找到哪块内存呢?找到你的进程那一块内存;
可能还有朋友理解不了,想一想WinMain函数被调用之前,是不是进程已经形成了?那从时间角度上来说,WinMain函数就可以被传参进程的内存信息了;这完全没有毛病;
第二个参数:被废弃;
第四个参数:就是窗口最大化,最下化,还是正常 显示;


MessageBox函数功能:就是弹出一个提示框;
第一个参数:父窗口句柄,也就是希望你的弹出窗口显示在哪个窗口的中呗;如果填NULL,表示弹出的窗口的父窗口是桌面;
与此同时:HWND是窗口句柄,作用就是找到一块内存,什么内存?就是存放窗口的数据结构的内存;窗口数据结构?是什么?就是你的窗口大小,颜色,背景,菜单等信息组成的数据结构咯;


6 窗口类


7 窗口类的分类

在这里插入图片描述


系统窗口类:OS创建的窗口就是系统窗口类;比如我们的dos窗口,比如我们的桌面;
在这里插入图片描述


如果你在win32项目中,要使用系统窗口类,直接调用CreateWindows函数就可以创建成功,不需要注册窗口类的步骤;
比如这里创建一个编辑框的窗口类:(连RegisterWindows函数都没有调用)

在这里插入图片描述


8 注册窗口类函数

在这里插入图片描述
该函数,失败返回0,可以用来检测是否注册窗口类成功,注册窗口类:说直白就是向OS写入一个变类型为WNDXLASS的结构体变量,并且初始化他而已;

9 注册窗口类的结构体

在这里插入图片描述


10 注册全局和局部窗口类

在这里插入图片描述


不建议用全局窗口类,微软官方手册说的;
CS_DBLCLKS:该参数如果没有,那么你的窗口无论点多块的双击都是两次单击;


11 创建窗口的函数

在这里插入图片描述


后缀有Ex的函数,和没有Ex的函数,区别就是Ex的函数多路第一个参数,但是这个参数没有实际的用途,所以也不必要关心;


先关注,第二个和倒数第二个参数:
第二个参数:表示注册窗口类的名称;
倒数第二个参数:表示该窗口和哪个进程相关联;
在这里插入图片描述


CreateWindow内部的执行过程:

在这里插入图片描述


在这里插入图片描述

一般来说:我们调用CreateWindow都是为了创建局部窗口了类:
大概执行步骤就是拿到传入的窗口类名字去内核查找窗口类名字是否匹配(内核的窗口类,是你提前注册好的);
找到就继续匹配,你传入的instance 局部是否匹配内核的instance, 如果匹配表示你的窗口就是创建在本进程;
成功后返回一个窗口句柄,供你使用;


12 创建一个windows的过程步骤

在这里插入图片描述


基本基本代码框架:

#include <Windows.h>LRESULT CALLBACK WndPro(HWND hWnd,UINT msgID,WPARAM wParam,LPARAM lParam)
{switch (msgID){case WM_DESTROY: //点击关闭按钮PostQuitMessage(0); //使得GetMessage返回0break;default:break;}return DefWindowProc(hWnd,msgID,wParam,lParam);
}
int WINAPI WinMain(HINSTANCE hinstance,HINSTANCE pHinstance,LPSTR lpCmdLine,int nShowLine)
{//注册主窗口类WNDCLASS wc;wc.cbClsExtra = 0;wc.cbWndExtra = 0;wc.hbrBackground = (HBRUSH)(COLOR_WINDOW + 1);wc.hCursor = NULL;						//默认光标wc.hIcon = NULL;						//默认图标 图标就是标题栏左上角那个东西wc.hInstance = hinstance;wc.lpfnWndProc = WndPro;				//窗口过程函数wc.lpszClassName = "WinBase";			//窗口类名字,随便起也行wc.lpszMenuName = NULL;					//无菜单wc.style = CS_HREDRAW | CS_VREDRAW;		//窗口垂直水平变化时候,窗口自动重画RegisterClass(&wc);						//向OS写入 wc变量// 在内存中创建一个窗口HWND hWnd = CreateWindow("WinBase", /*窗口的类名*/"Windows",						/*窗口标题*/WS_OVERLAPPEDWINDOW,			/*窗口样式*/100, 100, 100, 100,				/*窗口x,y,width,height*/NULL, NULL, hinstance, NULL);	/*父窗口:桌面 菜单:无 窗口是当前进程的 无附加参数*///显示窗口ShowWindow(hWnd, SW_SHOW);			//SW_SHOW按原样显示,也就是说Create设置的参数//刷新窗口-->就是在此显示一次UpdateWindow(hWnd);//消息循环MSG msg;while(GetMessage(&msg, NULL, 0, 0)){TranslateMessage(&msg);DispatchMessage(&msg);}return 0;
}

TranslateMessage(&msg)的大致执行过程,当我们按下大写字母键盘a时候;

在这里插入图片描述


13 创建一个子窗口的方法

和创建一个Windows一样,只不过,需要一点区别:
首先肯定也要注册一个子窗口类,当然,这个类只要有一个就可以,一个窗口类是可以被创建为多个窗口的;也就是说,我们又一个子窗口类,就可以调用多次CreateWindow来进行创建窗口了;


对于CreateWindows函数。必要设置的参数是:
在这里插入图片描述


这是创建主窗口,和子窗口的基本框架:

#include <Windows.h>LRESULT CALLBACK WndPro(HWND hWnd,UINT msgID,WPARAM wParam,LPARAM lParam)
{switch (msgID){case WM_DESTROY: //点击关闭按钮PostQuitMessage(0); //使得GetMessage返回0break;default:break;}return DefWindowProc(hWnd,msgID,wParam,lParam);
}
int WINAPI WinMain(HINSTANCE hinstance,HINSTANCE pHinstance,LPSTR lpCmdLine,int nShowLine)
{//注册主窗口类WNDCLASS wc;wc.cbClsExtra = 0;wc.cbWndExtra = 0;wc.hbrBackground = (HBRUSH)(COLOR_WINDOW + 1);wc.hCursor = NULL;						//默认光标wc.hIcon = NULL;						//默认图标 图标就是标题栏左上角那个东西wc.hInstance = hinstance;wc.lpfnWndProc = WndPro;				//窗口过程函数wc.lpszClassName = "WinBase";			//窗口类名字,随便起也行wc.lpszMenuName = NULL;					//无菜单wc.style = CS_HREDRAW | CS_VREDRAW;		//窗口垂直水平变化时候,窗口自动重画RegisterClass(&wc);						//向OS写入 wc变量//注册子窗口类WNDCLASS wc_child;wc_child.cbClsExtra = 0;wc_child.cbWndExtra = 0;wc_child.hbrBackground = (HBRUSH)(COLOR_WINDOW + 1);wc_child.hCursor = NULL;						//默认光标wc_child.hIcon = NULL;						//默认图标 图标就是标题栏左上角那个东西wc_child.hInstance = hinstance;wc_child.lpfnWndProc = DefWindowProc;				//窗口过程函数wc_child.lpszClassName = "Child";			//窗口类名字,随便起也行wc_child.lpszMenuName = NULL;					//无菜单wc_child.style = CS_HREDRAW | CS_VREDRAW;		//窗口垂直水平变化时候,窗口自动重画RegisterClass(&wc_child);// 在内存中创建一个窗口HWND hWnd = CreateWindow("WinBase", /*窗口的类名*/"Windows",						/*窗口标题*/WS_OVERLAPPEDWINDOW,			/*窗口样式*/100, 100, 100, 100,				/*窗口x,y,width,height*/NULL, NULL, hinstance, NULL);	/*父窗口:桌面 菜单:无 窗口是当前进程的 无附加参数*/// 创建一个子窗口HWND hWnd_child = CreateWindow("Child","child___",WS_CHILD | WS_VISIBLE | WS_OVERLAPPEDWINDOW,0, 0, 40, 40, hWnd, NULL, hinstance, NULL);//显示窗口ShowWindow(hWnd, SW_SHOW);			//SW_SHOW按原样显示,也就是说Create设置的参数//刷新窗口-->就是在此显示一次UpdateWindow(hWnd);//消息循环MSG msg;while(GetMessage(&msg, NULL, 0, 0)){TranslateMessage(&msg);DispatchMessage(&msg);}return 0;
}

重点关注这里:
其他样式方面可以按你的场景进行设计;


在这里插入图片描述


14 消息的概念及其作用

在这里插入图片描述


在Windows下的消息,其实就是一个结构体信息而已,里面包含了上面PPT的一些成员,组成了一个消息;
在这里插入图片描述


注意每个窗口都对应一个窗口处理函数:也就是说,每当你调用一个CreateWindow都会对应一个窗口处理函数;
但是多个窗口是可以复用一个窗口处理函数的;


要理解:消息是你应用程序产生的,然后由你操作系统抓到,并把它放入消息队列,再由GetMessage从中取出消息,交给DispatchMessage函数进行派发给窗口处理函数进行处理(这个过程就是OS拿到你的消息,找到你对应的处理消息的函数,进行处理,这里使用的机制就是回调函数的机制,DispatchMessage内部就是回调了你窗口过程函数);


如DispatchMessage大致的工作流程:
拿到你的消息,就可以拿到你的窗口句柄,又知道每个窗口句柄对应一个窗口处理函数,自然而然,可以找到你的消息对应窗口处理函数进行调用处理消息;
并且你发现,在函数内部调用你的窗口处理函数进行传参的四个参数,也就是说我们MSG结构体的前4个成员变量,所以说,我们只要有了消息,就可以进行消息处理是完全没有问题的;
在这里插入图片描述


在这里插入图片描述


所以我们要清楚,当消息产生是要要关注消息是哪个窗口产生的,产生的消息是什么,产生的消息交给谁去处理;


15 浅谈GetMessage 函数

函数:该函数获取本进程消息队列中的消息;
在这里插入图片描述


第二个参数:指定为NULL,抓取本进程所有窗口的消息,如果为指定句柄,那么他只会抓取该句柄的消息;
返回值:该函数的返回值,只有在GetMessage抓到一个WM_QUIT消息时候,才会返回0;这个消息是PostQuitMessage(0) 函数调用发出的;


16 浅谈 TranslateMessage 函数

在这里插入图片描述


该函数只会翻译键盘消息,并且翻译可见字符消息,也就是在ASCII表中可见字符,比如字母和数字等;如果不是可见字符的按键消息那么就不会做任何事情;


17 使用消息

在微软中,提供了大概有1000多个消息,我们可以直接拿来用;使用消息时候,需要关注三点:
消息的产生时间;
消息的附带两个参数,告知的信息;
消息的一般用法;


使用消息时候,并不是使用消息的变量去使用,而是使用消息的ID去使用;
也就是说,不是直接去用MSG定义变量使用消息,而是用我们的MSG里面的一个messageID 去使用;


WM_DESTROY 消息:
请注意:这个消息并不是你鼠标点击右上角那个叉叉才产生的,而是窗口被销毁前系统自动把你产生的一个消息哦;
在这里插入图片描述


WM_SYSCOMMND:
点击菜单框都会产生,包括你的边界滚动条,所以一般这个消息在处理的时候,还要通过WParam参数进行判断你按的位置是哪个地方,比如wParam == SC_CLOSE 表示你按的是 关闭按钮,那么你就可以对其进行处理,假如你按的是其他菜单的其他位置你就可以不处理;
在这里插入图片描述


在这里插入图片描述


该消息是自己发送,调用PostQuitMessage发送,并且该消息不用自己处理,让系统处理;


其实消息种类太多,无法一一说明,这里只是举例,需要还是自己查手册啊;


18 消息循环的基本原理

在这里插入图片描述


GetMessage是个阻塞函数,如果没有抓不到消息,那么就阻塞,如果抓到消息就返回;
阻塞可不是一个好习惯;所以我们经常需要配合非阻塞函数PeekMessage来使用;


对比:阻塞和非阻塞的写法:

// 主消息循环: 阻塞while (GetMessage(&msg, NULL, 0, 0)){	TranslateMessage(&msg);DispatchMessage(&msg);}/****************************************************************//****************************************************************//****************************************************************/// 主消息循环: 非阻塞while (1){if (!PeekMessage(&msg, NULL, 0, 0, PM_NOREMOVE)){//没有消息,空闲处理}else{//有消息if (!GetMessage(&msg, NULL, 0, 0)){return 0;}TranslateMessage(&msg);DispatchMessage(&msg);}}

19 发送消息

我们知道,GetMessage可以从消息队列中抓消息进行处理
在这里插入图片描述


但是我们并不知道,消息到底是谁发送的;


在这里插入图片描述


首先得明白,不管是系统发的消息,还是程序员自己手动发的消息,在windows中发送消息,只能由这两个函数进行发送;
SendMessage: 阻塞函数,发送消息,消息没被处理完都不会返回;
PostMessage: 非阻塞函数;
我们自己只需要拿到消息的四个参数信息即可使用该两个函数,但是我们知道消息的信息是有6个成员信息组成,其实该函数内部会自己通过一些方式拿到剩余的两个信息:也就是说消息的坐标,消息的时间;我们不关心这两个消息;
我们要知道,PostMessage函数,发送消息,直接发送到消息队列中的,而SendMessage并不是直接发送消息到消息队列,至于发到哪?后面会讲到;


20 消息的分类

在这里插入图片描述


自定义消息的基本使用步骤:

在这里插入图片描述


21 消息队列

在这里插入图片描述


22 消息队列分类

在这里插入图片描述
系统的消息队列:保存所有进程产生的消息,该消息队列很大:
消息的产生首先交由给系统的消息队列,再由OS每隔一段时间将消息转发到各个进程的消息队列中;
GetMessage只会抓取本进程的消息;
在这里插入图片描述


23 消息和消息队列的关系

在这里插入图片描述


队列消息:消息进队列;
非队列消息:消息不进队列;
在这里插入图片描述


有些消息必须进队列,如WM_QUIT,因为GetMessage要返回,必须在队列抓到该消息;有些消息必须不进队列,如WM_CREATE,因为该消息,在窗口处理函数之前就会产生;
有些消息可进可不进,如WM_SIZE;


24 GetMessage函数内部执行过程

在这里插入图片描述

  1. GetMessage 是阻塞函数,GetMessage 只会从进程还是线程中消息队列获取消息;
  2. 该函数若发现消息队列无消息,就会询问系统的消息队列是否有消息;如果有系统就会吧消息刷新到本进程的消息队列中;
  3. 如果本进程消息队列无消息,系统队列无消息,没有绘图消息,没有定时器消息,没有整理资源,释放内存,那么GetMessage就会阻塞;PeekMessage干的事和GetMessage一样,区别就是最后一个步骤他不会阻塞;

WI_PAINT消息:在窗口从0到1被创建前,系统会发送一个消息,且该消息不进消息队列,直接调用窗口处理函数;



http://chatgpt.dhexx.cn/article/pfGpBFX1.shtml

相关文章

windows系统编程1——线程和进程

学习视频链接 03进程的创建_哔哩哔哩_bilibilihttps://www.bilibili.com/video/BV1Fd4y1G7Td?p3&vd_source0471cde1c644648fafd07b54e303c905 目录 一、创建线程 二、线程间同步 2.1 线程不同步的结果 2.2 原子操作上锁 2.3 临界区 2.4 内核对象 三、线程间通信…

day01 windows编程入门

文章目录 window编程基本概念Windows常见的数据类型字符串的处理 第一个windows程序的编写 window编程基本概念 Windows编程的本质就是使用好操作系统&#xff0c;想要用好操作系统必不可少的秘籍----MSDN。 Windows编程主要分为两种&#xff1a; 1、控制台编程(CUI) 2、图形界…

10行代码带你入门Windows编程

Windows编程——Hello World 开发工具效果展示源代码主函数主函数参数HINSTANCEhInstanccehPreInstanceLPSTRlpCmdLinenCmdShowMessageBox 小知识 开发工具 Visual Studio 2013 效果展示 源代码 #include <Windows.h> //头文件//主函数 int WINAPI WinMain(HINSTANC…

使用VS Code进行Qt开发

使用VS Code进行Qt开发 文章目录 使用VS Code进行Qt开发测试环境步骤1. 将Qt的bin目录添加到环境变量2. 安装VS Code扩展3. 使用Qt Creator创建CMake项目4. 在VS Code中打开项目5. 构建并运行项目7. 调试项目 一些小问题 Qt Creator界面不美观&#xff0c;而VS Code更漂亮一些。…

Qt开发CAN通信的环境配置

Qt开发CAN通信的环境配置 目录 1 开发环境 1 1.1 编程环境 1 1.2 工程设置 1 1.3 调试窗口设置 2 1.4 依赖库 2 1.5 源代码的适配 3 2 运行及硬件环境 3 2.1 CAN设备 3 2.4 运行支持文件 3 3 故障解决 4 3.1 转到槽函数失败 4 1 开发环境 1.1 编程环境 工程采用Windows系统下的…

Qt开发必备技术栈学习路线和资料

简介 本文为&#xff1a;C QT 学习路线大纲资料&#xff08;文章底部&#xff09; Qt 可以做什么&#xff1f; Qt 虽然经常被当做一个 GUI 库&#xff0c;用来开发图形界面应用程序&#xff0c;但这并不是 Qt 的全部&#xff1b;Qt 除了可以绘制漂亮的界面&#xff08;包括控…

WIndows下搭建Qt开发环境 -- Qt 、Qt Creater 安装、配置

[本文发布于https://blog.csdn.net/Stack_/article/details/122491885&#xff0c;未经许可不得转载&#xff0c;转载须注明出处] 一、需要下载安装哪些文件 1Qt SDK&#xff0c;即Qt官方提供的API2编辑器、UI设计器 – Qt Creater3编译器 其中Qt Creater是可以被Visual Studi…

Qt开发MQTT(一) 之Qt官方Qt MQTT

概述 Qt开发MQTT程序有两种方式&#xff0c;一个是Qt官方提供的基于MQTT的封装&#xff0c;一个是第三方&#xff08;EMQ&#xff09;开发的用于Qt调用MQTT的接口&#xff0c;二者使用方法大同小异&#xff0c;并且均提供了源码。那么&#xff0c;这里先来介绍第一种&#xff…

Qt开发之Rust篇(一)

本文运行环境&#xff1a; 操作系统&#xff1a;Windows 11 专业版Visual Studio版本&#xff1a;Visual Studio 2022 PreviewQt版本&#xff1a;Qt 5.14.2 1、安装C编译器 除了 Rust 自己的构建工具之外&#xff0c;您还需要设置 C 编译器、Qt 和 CMake。 在 Windows 上&am…

【Qt】ubuntu下Qt开发环境的搭建

下载对应版本的Qt开发环境 Qt官网下载地址&#xff1a;https://download.qt.io 国内镜像下载地址&#xff1a;https://mirrors.cloud.tencent.com/qt/ 。建议用镜像下载速度快。集成安装包在 official_releases/qt 目录下&#xff0c;新地址&#xff1a;https://download.q…

QT开发环境简介、安装以及搭建VS2019环境

文章目录 1、QT简介2、 QT的安装1、下载QT安装包2、安装QT1、安装qt creator2、设置qt账号3、选择安装路径4、选择组件5、同意许可协议&#xff0c;下一步6、菜单快捷方式7、点击安装&#xff0c;等待安装完成8、安装完成 3、qt creator创建工程1、打开软件2、新建项目3、选择Q…

Qt开发框架介绍

Qt: 基于C++跨平台的软件开发框架 Languages: C++, Python, Qt QML, Javascript Qt支持的平台有:Windows, Linux, macOS Qt Quick技术: 描述性UI设计语言(QML)作为前端, C++作为后端. 适用于基于触摸操作的界面的开发, 轻松实现优美、现代的界面. 默认使用GPU进行图形渲染.…

用QT开发安卓应用

QT官网参考链接 https://doc.qt.io/qt-5/android.html 这里的指示是QT5的&#xff0c;和QT6有点不同。 安装QT 下载地址QT6&#xff1a;http://download.qt.io/archive/qt/6.0/6.0.0/single/ 安装后&#xff0c;会多出一个Qt文件夹&#xff0c;里边包含了Qt Creator.app和…

【QT基础入门】1、QT开发环境搭建

文章目录 一、学习所需要的软件 二、安装 VS2012 三、win10 下安装 QT 一、学习所需要的软件 Visual Studio 2012Qt SDK 4.7.4Qt Creator 2.4.1 Visutal Studio 2012 用于学习 Windows 上 GUI 程序设计的原理体会使用 C/C 编写 GUI 窗口应用程序展现 Qt 对于 Windows 窗口开…

UOS搭建QT开发环境

需要注意的是&#xff0c;UOS与其他ubantu系统不同&#xff0c;UOS本身是基于QT开发的&#xff0c;所以当安装的QT版本高于UOS开发者使用的版本时&#xff0c;在使用过程中会出现各种问题。 以下以 UOS家庭版&#xff08;系统环境搭建参考本人上一篇博客 搭建国产化统信UOS操作…

VS2019 Qt开发环境搭建与配置

目录 更新说明 学习Qt、安装Qt环境的困扰 问题1&#xff1a;该选什么操作系统&#xff0c;该用MinGW还是msvc ? 问题2&#xff1a;如果用visual studio该安装哪个qt版本&#xff1f; 问题3&#xff1a;Qt开发商业软件需要付费授权吗&#xff1f; Visual studio Qt 安装步骤…

安装QT开发环境

UOS操作系统 1. 开启开发者权限。 开启开发者权限后可以使用root权限。 2. 先获取可更新的软件执行 sudo apt-get update 3. 安装所有可更新的软件 sudo apt-get dist-upgrade 4. 安装所有依赖的环境包 一下命令为了方便可以写入脚本中执行脚本运行更加方便。一下除了安…

Qt开发Android环境配置

目录 0.前提 1.安装JDK 2.Android SDK下载 3. 安装模拟器 4.Qt中进行配置 5.新建android项目 6.结束 0.前提 安装Qt时勾选Android相关套件&#xff0c;确保Qt的安装组件已被安装。 1.安装JDK Java Downloads | Oracle 安装java8即可&#xff0c;需要登陆&#xff0c;没…

08_树莓派安装Qt开发环境

目的&#xff1a; 通过本章节&#xff0c;在树莓派上安装Qt开发环境。 目录 1、Qt简介 2、安装Qt开发环境 2.1、安装指令 2.2、示例demo 2.2.1、打开Qt Creator工具 2.2.2、新建工程 2.2.3、添加hello标签 2.2.4、编译运行工程代码 2.2.5、运行结果 1、Qt简介 Qt 是一个…

Qt 开发环境搭建

一、Qt下载与安装 1、qt下载网站https://download.qt.io/ 其中各个目录含义如下&#xff1a; 目录说明snapshots/预览版&#xff0c;最新开发测试的Qt库和开发工具online/在线安装源official_releases/正式发布版&#xff0c;是与开发版相对应的稳定版Qt库和开发工具&#x…