开发者如何使用GCC提升开发效率GUI操作

看此篇前请先阅读https://blog.csdn.net/qq_20330595/article/details/144139026?spm=1001.2014.3001.5502

先上效果图

在这里插入图片描述

找到对应的环境版本

在这里插入图片描述

配置环境

在这里插入图片描述

目录结构

在这里插入图片描述
Ctrl+Shift+P
c_cpp_properties.json

{"configurations": [{"name": "Win32","includePath": ["${workspaceFolder}/src/**","${workspaceFolder}/stb/**","G:\\SFML-2.6.2\\include"],"defines": ["_DEBUG","UNICODE","_UNICODE"],"compilerPath": "G:\\mingw64\\bin\\gcc.exe","cStandard": "c17","cppStandard": "gnu++17","intelliSenseMode": "windows-gcc-x64"}],"version": 4
}

launch.json

{"version": "0.2.0","configurations": [// {//   "name": "(gdb) Launch", //   "type": "cppdbg", //   "request": "launch", //   "program": "${fileDirname}\\${fileBasenameNoExtension}.exe", // 修改为相应的可执行文件//   "args": [], //   "stopAtEntry": false,//   "cwd": "${workspaceRoot}",//   "environment": [],//   "externalConsole": true, //   "MIMode": "gdb",//   "miDebuggerPath": "G:\\mingw64\\bin\\gcc.exe",//   "preLaunchTask": "g++",//   "setupCommands": [//     {//       "description": "Enable pretty-printing for gdb",//       "text": "-enable-pretty-printing",//       "ignoreFailures": true//     }//   ]// }]}

settings.json自定生成

{"files.associations": {"iostream": "cpp","string": "cpp","array": "cpp","atomic": "cpp","bit": "cpp","*.tcc": "cpp","cctype": "cpp","clocale": "cpp","cmath": "cpp","compare": "cpp","concepts": "cpp","cstdarg": "cpp","cstddef": "cpp","cstdint": "cpp","cstdio": "cpp","cstdlib": "cpp","ctime": "cpp","cwchar": "cpp","cwctype": "cpp","deque": "cpp","map": "cpp","set": "cpp","unordered_map": "cpp","vector": "cpp","exception": "cpp","algorithm": "cpp","functional": "cpp","iterator": "cpp","memory": "cpp","memory_resource": "cpp","numeric": "cpp","random": "cpp","string_view": "cpp","system_error": "cpp","tuple": "cpp","type_traits": "cpp","utility": "cpp","initializer_list": "cpp","iosfwd": "cpp","istream": "cpp","limits": "cpp","new": "cpp","numbers": "cpp","ostream": "cpp","stdexcept": "cpp","streambuf": "cpp","cinttypes": "cpp","typeinfo": "cpp","optional": "cpp"}
}

Ctrl+Shift+P
tasks.json

{"version": "2.0.0","tasks": [{"type": "cppbuild","label": "C/C++: g++.exe build active file","command": "g++","args": ["${workspaceFolder}/src/*.cpp","-I${workspaceFolder}/stb","-IG:\\SFML-2.6.2\\include","-LG:\\SFML-2.6.2\\lib",        "-o","${fileDirname}/${fileBasenameNoExtension}.exe","-lsfml-graphics","-lsfml-system","-lsfml-window",],"options": {"kind": "build","isDefault": true},"problemMatcher": ["$gcc"],"group": {"kind": "build","isDefault": true},"detail": "Task generated by Debugger."},{"label": "Run Output","type": "shell","command": "main", // 运行生成的可执行文件  "group": "test","dependsOn": "Compile All C and CPP Files","problemMatcher": ["$gcc"], // GCC 问题匹配器  }]
}

image_loader.cpp

#define STB_IMAGE_IMPLEMENTATION  
#include "stb_image.h"  
#include "image_loader.h"  
#include <iostream>  unsigned char* ImageLoader::loadImage(const std::string& filepath, int& width, int& height, int& channels) {  unsigned char* img_data = stbi_load(filepath.c_str(), &width, &height, &channels, 0);  if (img_data == nullptr) {  std::cerr << "Error loading image: " << stbi_failure_reason() << std::endl;  return nullptr;  }  return img_data;  
}  void ImageLoader::freeImage(unsigned char* img_data) {  stbi_image_free(img_data);  
}

image_loader.h

#ifndef IMAGE_LOADER_H  
#define IMAGE_LOADER_H  #include <string>  class ImageLoader {  
public:  static unsigned char* loadImage(const std::string& filepath, int& width, int& height, int& channels);  static void freeImage(unsigned char* img_data);  
};  #endif // IMAGE_LOADER_H

image_processor.cpp

#include "image_processor.h"  void ImageProcessor::invertColors(unsigned char* img_data, int width, int height, int channels) {  for (int i = 0; i < width * height * channels; i++) {  img_data[i] = 255 - img_data[i]; // 反转颜色  }  
}

image_processor.h

#ifndef IMAGE_PROCESSOR_H  
#define IMAGE_PROCESSOR_H  class ImageProcessor {  
public:  static void invertColors(unsigned char* img_data, int width, int height, int channels);  
};  #endif // IMAGE_PROCESSOR_H

test_sfml.cpp

// MessageBox.cpp
#include "test_sfml.hpp" // 引入头文件void showMessageBox(sf::RenderWindow &window, const std::string &message)
{// 创建一个用于弹窗的窗口sf::RenderWindow popup(sf::VideoMode(300, 150), "Message", sf::Style::Close);popup.setPosition(sf::Vector2i(100, 100)); // 设置弹窗位置// 设置字体(需要一个字体文件,确保路径正确)sf::Font font;if (!font.loadFromFile("arial.ttf")){           // 检查字体是否加载成功return; // 若失败则退出}// 创建文本sf::Text text(message, font, 20);text.setFillColor(sf::Color::Black);text.setPosition(10, 40);// 创建关闭按钮文本sf::Text closeButton("Close", font, 20);closeButton.setFillColor(sf::Color::Black);closeButton.setPosition(100, 100);// 事件循环while (popup.isOpen()){sf::Event event;while (popup.pollEvent(event)){if (event.type == sf::Event::Closed){popup.close(); // 关闭弹窗}if (event.type == sf::Event::MouseButtonPressed){// 检查关闭按钮是否被点击if (event.mouseButton.button == sf::Mouse::Left &&closeButton.getGlobalBounds().contains(event.mouseButton.x, event.mouseButton.y)){popup.close(); // 关闭弹窗}}}popup.clear(sf::Color::White); // 清屏,设置弹窗背景颜色popup.draw(text);              // 绘制文本popup.draw(closeButton);       // 绘制关闭按钮文本popup.display();               // 显示内容}
}

test_sfml.hpp

// MessageBox.hpp  
#ifndef MESSAGEBOX_HPP  
#define MESSAGEBOX_HPP  #include <SFML/Graphics.hpp>  
#include <string>  void showMessageBox(sf::RenderWindow& window, const std::string& message);  #endif // MESSAGEBOX_HPP

stb_image.c stb_image_write.h stb_image.h
见上文讲解,未图片解析库源码,引入即可

main.cpp

#define STB_IMAGE_WRITE_IMPLEMENTATION
#include "stb_image_write.h"
#include "image_loader.h"
#include "image_processor.h"
#include "test_sfml.hpp"
#include <iostream>int main()
{// 输入图像路径const char *inputFilepath = "G:\\WorkSpacePy\\images_cmake\\IRI_20220322_145855.jpg"; const char *outputFilepath = "output_image.png";                                      int width, height, channels;// 加载图像unsigned char *img_data = ImageLoader::loadImage(inputFilepath, width, height, channels);if (img_data == nullptr){return -1; // 加载失败}// 打印图像信息std::cout << "Image loaded successfully!" << std::endl;std::cout << "Width: " << width << ", Height: " << height << ", Channels: " << channels << std::endl;// 反转颜色ImageProcessor::invertColors(img_data, width, height, channels);std::cout << "Colors inverted!" << std::endl;// 保存新的图像if (stbi_write_png(outputFilepath, width, height, channels, img_data, width * channels)){std::cout << "Image saved successfully as " << outputFilepath << std::endl;}else{std::cerr << "Error saving image!" << std::endl;}/* ================================================  GUI代码 ================================================*/// 释放图像数据ImageLoader::freeImage(img_data);std::cout << "Starting the main window..." << std::endl;// 创建主窗口sf::RenderWindow window(sf::VideoMode(width, height), "SFML Simple Window");// 加载图片sf::Texture texture;texture.loadFromFile(inputFilepath); // Replace with your image file// 创建精灵sf::Sprite sprite;sprite.setTexture(texture);sprite.setPosition(0, 0); // Set the position of the sprite// 主程序循环while (window.isOpen()){sf::Event event;while (window.pollEvent(event)){if (event.type == sf::Event::Closed){window.close(); // 关闭主窗口}if (event.type == sf::Event::KeyPressed && event.key.code == sf::Keyboard::Space){// 摁下空格键时显示弹窗showMessageBox(window, "Hello from SFML!"); // 点击提示框时显示一条消息}}window.clear(sf::Color::White); // 清屏设置背景颜色为白色window.draw(sprite);            // 绘制精灵window.display();               // 显示内容}return 0;
}

// https://www.sfml-dev.org/download/sfml/2.6.2/
// https://blog.csdn.net/F1ssk/article/details/139710907
// https://openatomworkshop.csdn.net/67404a4e3a01316874d72fa5.html

下一步使用Libusb

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

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

相关文章

fastadmin 后台插件制作方法

目录 一&#xff1a;开发流程 二&#xff1a;开发过程 &#xff08;一&#xff09;&#xff1a;后台功能开发 &#xff08;二&#xff09;&#xff1a;功能打包到插件目录 &#xff08;三&#xff09;&#xff1a;打包插件 &#xff08;四&#xff09;&#xff1a;安装插件…

电脑鼠标箭头一直闪烁怎么回事?原因及解决方法

电脑鼠标箭头不停闪烁&#xff0c;很多用户都曾遇到过&#xff0c;就是点击也无法点击&#xff0c;只能看到箭头一直闪动。造成这种故障的原因有很多&#xff0c;可能是硬件、软件或系统的问题。本文将介绍电脑鼠标箭头不停闪烁的可能原因和相应的解决方法&#xff0c;帮助大家…

网络——HTTP与HTTPS三次握手和四次挥手

HTTP协议本身并不直接处理TCP连接的建立和关闭&#xff0c;这些是由底层的TCP协议来完成的。但是&#xff0c;由于HTTP通常运行在TCP之上&#xff0c;因此理解TCP的三次握手&#xff08;用于建立连接&#xff09;和四次挥手&#xff08;用于关闭连接&#xff09;对于理解HTTP通…

使用PPT科研绘图导出PDF边缘留白问题解决方案

使用PPT画图导出PDF格式后&#xff0c;边缘有空白&#xff0c;插入latex不美观&#xff0c;解决方案为自定义PPT幻灯片母版大小&#xff0c;如题步骤为&#xff1a; 1、查看已制作好的图片的大小&#xff0c;即长度和宽度 2、选择自定义幻灯片大小 3、自定义幻灯片大小为第1…

利用docker-compose来搭建flink集群

1.前期准备 &#xff08;1&#xff09;把docker&#xff0c;docker-compose&#xff0c;kafka集群安装配置好 参考文章&#xff1a; 利用docker搭建kafka集群并且进行相应的实践-CSDN博客 这篇文章里面有另外两篇文章的链接&#xff0c;点进去就能够看到 &#xff08;2&…

计算机网络复习6——网络层

域名系统NDS NDS是互联网的命名系统&#xff0c;用来把便于人们使用的机器名字转换为IP地址&#xff0c;作为人与机器之间的中间件 域名 域名是主机的名字 域名使用层次树状结构&#xff0c;由标号序列组成&#xff0c;各标号之间用点隔开&#xff0c;每个名字在互联网上是…

Python_Flask01

所有人都不许学Java了&#xff0c;都来学Python&#xff01; 如果不来学的话请网爆我的老师---蔡老师 Flask的前世姻缘 我不知道&#xff0c;没啥用&#xff0c;要学好这个框架&#xff0c;其实多读书&#xff0c;多看报就行了&#xff0c;真心想了解的话&#xff01; Welcom…

借助 AI 工具,共享旅游-卡-项目助力年底增收攻略

年底了&#xff0c;大量的商家都在开始筹备搞活动&#xff0c;接下来的双十二、元旦、春节、开门红、寒假&#xff0c;各种活动&#xff0c;目的就是为了拉动新客户。 距离过年还有56 天&#xff0c;如何破局&#xff1f; 1、销售渠道 针对旅游卡项目&#xff0c;主要销售渠道…

SHELL----正则表达式

一、文本搜索工具——grep grep -参数 条件 文件名 其中参数有以下&#xff1a; -i 忽略大小写 -c 统计匹配的行数 -v 取反&#xff0c;不显示匹配的行 -w 匹配单词 -E 等价于 egrep &#xff0c;即启用扩展正则表达式 -n 显示行号 -rl 将指定目录内的文件打…

基于Pyhton的人脸识别(Python 3.12+face_recognition库)

使用Python进行人脸编码和比较 简介 在这个教程中&#xff0c;我们将学习如何使用Python和face_recognition库来加载图像、提取人脸编码&#xff0c;并比较两个人脸是否相似。face_recognition库是一个强大的工具&#xff0c;它基于dlib的深度学习模型&#xff0c;可以轻松实…

vitepress组件库文档项目 markdown语法大全(修正版)

#上次总结的 有些语法是用在markdown文档中的 使用到vitepress项目中有些语法可能有出入 于是我再总结一版 vitepress项目中的markdown语法大全 在阅读本章节之前&#xff0c;请确保你已经对 Markdown 有所了解。如果你还不了解 Markdown &#xff0c;请先学习一些Markdown 教…

Ubuntu 构建安装 mongocxx 驱动(使用指定版本 mongoc 驱动)

Ubuntu 构建安装 mongocxx 驱动&#xff08;使用指定版本 mongoc 驱动&#xff09; 安装依赖项安装 mongo-cxx-driver测试安装 本文是安装 MongoDB C 驱动程序&#xff08;mongocxx&#xff09;的详细教程&#xff0c;系统使用的是 Ubuntu24。 如果想安装 mongodb 数据库&#…

linux上修改容器网卡docker0为固定ip

修改容器为固定ip段。 1.在一次项目中发现创建的容器网段跟办公室网段有冲突的&#xff0c;导致连接不上。修改容器ip为固定ip 这是默认启动docker自动创建的。172网段 2.修改前先停用运行容器 3.在配置路径下修改vim /etc/docker/daemon.json 4.重启docker systemctl re…

vue 具名插槽

vue 具名插槽 1.slot 插槽ComponentB slot 2. v-slot属性具名插槽 简写 v-slot # 2.1具名插槽 2.2 v-slot 简写 插槽数 据

技术栈6:Docker入门 Linux入门指令

目录 1.Linux系统目录结构 2.处理目录的常用命令 3.Docker概述 4.Docker历史 5.Docker基本组成 6.Docker底层原理 7.Docker修改镜像源 8.Docker基本命令 9.Docker创建Nginx实战 10.数据卷 11.镜像和dockerfile 在学习docker之前我们先要熟悉Linux系统&#xff0c;推…

同为科技(TOWE)柔性定制化PDU插座

随着科技的进步&#xff0c;越来越多的精密电子设备&#xff0c;成为工作生活密不可分的工具。 电子电气设备的用电环境也变得更为复杂&#xff0c;所以安全稳定的供电是电子电气设备的生命线。 插座插排作为电子电气设备最后十米范围内供配电最终核心部分&#xff0c;便捷、安…

hhdb数据库介绍(10-43)

安全 密码安全管理 密码安全管理为用户提供了对计算节点数据库用户与存储节点的连接用户、备份用户的密码有效期监控提醒。到期后自动提示用户修改密码以提升系统的安全性。 数据库用户密码 &#xff08;一&#xff09;密码修改 用户可以在“安全->密码安全管理->数据…

Docker 安装 Yapi

Docker 安装系列 Docker已安装。 1、场景Yapi使用的MongoDB用户信息 1.1 创建自定义 Docker 网络 首先&#xff0c;创建一个自定义的 Docker 网络&#xff0c;以便 MongoDB 和 YApi 容器可以相互通信 [rootflexusx-328569 data]# docker network create yapi-networ…

基于vue框架的的献血管理系统knmx7(程序+源码+数据库+调试部署+开发环境)带论文文档1万字以上,文末可获取,系统界面在最后面。

系统程序文件列表 项目功能&#xff1a;用户,献血车,预约献血,献血记录,献血结果 开题报告内容 基于Vue框架的献血管理系统开题报告 一、课题名称 基于Vue框架的献血管理系统 二、研究背景与意义 随着医疗技术的不断进步和各类突发事件的频发&#xff0c;临床用血需求日益…

青龙面板添加任务执行自己的脚本文件(非订阅) 保姆级图文

目录 效果预览脚本存放的位置创建任务cron规则字段含义&#xff1a;常见的特殊字符&#xff1a; 可能你的脚本需要安装依赖总结 欢迎关注 『青龙面板』 专栏&#xff0c;持续更新中 欢迎关注 『青龙面板』 专栏&#xff0c;持续更新中 效果预览 你的python脚本 print(123)运行…