开发者如何使用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

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

高速定向广播声光预警系统赋能高速安全管控

近年来&#xff0c;高速重大交通事故屡见不鲜&#xff0c;安全管控一直是高速运营的重中之重。如何利用现代化技术和信息化手段&#xff0c;创新、智能、高效的压降交通事故的发生概率&#xff0c;优化交通安全管控质量&#xff0c;是近年来交管部门的主要工作&#xff0c;也是…

BiGRU:双向门控循环单元在序列处理中的深度探索

一、引言 在当今的人工智能领域&#xff0c;序列数据的处理是一个极为重要的任务&#xff0c;涵盖了自然语言处理、语音识别、时间序列分析等多个关键领域。循环神经网络&#xff08;RNN&#xff09;及其衍生结构在处理序列数据方面发挥了重要作用。然而&#xff0c;传统的 RN…

shell编程7,bash解释器的 for循环+while循环

声明&#xff01; 学习视频来自B站up主 泷羽sec 有兴趣的师傅可以关注一下&#xff0c;如涉及侵权马上删除文章&#xff0c;笔记只是方便各位师傅的学习和探讨&#xff0c;文章所提到的网站以及内容&#xff0c;只做学习交流&#xff0c;其他均与本人以及泷羽sec团队无关&#…

AI开发:生成式对抗网络入门 模型训练和图像生成 -Python 机器学习

阶段1&#xff1a;GAN是个啥&#xff1f; 生成式对抗网络&#xff08;Generative Adversarial Networks, GAN&#xff09;&#xff0c;名字听着就有点“对抗”的意思&#xff0c;没错&#xff01;它其实是两个神经网络互相斗智斗勇的游戏&#xff1a; 生成器&#xff08;Gene…

HarmonyOS开发中,如何高效定位并分析内存泄露相关问题

HarmonyOS开发中&#xff0c;如何高效定位并分析内存泄露相关问题 (1)Allocation的应用调试方式Memory泳道Native Allocation泳道 (2)Snapshot(3)ASan的应用使用约束配置参数使能ASan方式一方式二 启用ASanASan检测异常码 (4)HWASan的应用功能介绍约束条件使能HWASan方式一方式…

【Python】Selenium模拟在输入框里,一个字一个字地输入文字

我们平常在使用Selenium模拟键盘输入内容&#xff0c;常用的是用send_keys来在输入框上输入字&#xff1a; 基本的输入方式&#xff1a; input_element driver.find_element(By.ID, searchBox) input_element.send_keys("我也爱你") #给骚骚的自己发个骚话不过这种…

泷羽sec学习打卡-shell命令6

声明 学习视频来自B站UP主 泷羽sec,如涉及侵权马上删除文章 笔记的只是方便各位师傅学习知识,以下网站只涉及学习内容,其他的都 与本人无关,切莫逾越法律红线,否则后果自负 关于shell的那些事儿-shell6 if条件判断for循环-1for循环-2实践是检验真理的唯一标准 if条件判断 创建…

【ArkTS】使用AVRecorder录制音频 --内附录音机开发详细代码

系列文章目录 【ArkTS】关于ForEach的第三个参数键值 【ArkTS】“一篇带你读懂ForEach和LazyForEach” 【小白拓展】 【ArkTS】“一篇带你掌握TaskPool与Worker两种多线程并发方案” 【ArkTS】 一篇带你掌握“语音转文字技术” --内附详细代码 【ArkTS】技能提高–“用户授权”…

数据分析案例-笔记本电脑价格数据可视化分析

&#x1f935;‍♂️ 个人主页&#xff1a;艾派森的个人主页 ✍&#x1f3fb;作者简介&#xff1a;Python学习者 &#x1f40b; 希望大家多多支持&#xff0c;我们一起进步&#xff01;&#x1f604; 如果文章对你有帮助的话&#xff0c; 欢迎评论 &#x1f4ac;点赞&#x1f4…

系统监控——分布式链路追踪系统

摘要 本文深入探讨了分布式链路追踪系统的必要性与实施细节。随着软件架构的复杂化&#xff0c;传统的日志分析方法已不足以应对问题定位的需求。文章首先解释了链路追踪的基本概念&#xff0c;如Trace和Span&#xff0c;并讨论了其基本原理。接着&#xff0c;文章介绍了SkyWa…

游戏引擎学习第25天

Git: https://gitee.com/mrxiao_com/2d_game 今天的计划 总结和复述&#xff1a; 这段时间的工作已经接近尾声&#xff0c;虽然每次编程的时间只有一个小时&#xff0c;但每一天的进展都带来不少收获。尽管看起来似乎花费了很多时间&#xff0c;实际上这些日积月累的时间并未…

GaussDB TPOPS 搭建流程记录

目录 前言 环境准备 安装前准备 安装TPOPS 总结 前言 由于工作需要&#xff0c;准备将现有Oracle数据切换至GaussDB数据库。在这里记录一下安装GaussDB数据库过程踩的坑。 首先&#xff0c;我装的是线下版本&#xff0c;需要先装一个GaussDB轻量化管理平台&#xff08;…

Web网页设计作业成品源码分享(持续更新)

&#x1f389;Web前端大作业专栏推荐 &#x1f4da;Web前端期末大作业源码分享 ✍️html网页设计、web前后端网站制作、大学生网页设计作业、个人网站制作、jQuery网站设计、uniapp小程序、vue网站设计、node.js网站设计、网页成品模板、期末大作业&#xff0c;各种设计应有尽有…

facebook欧洲户开户条件有哪些又有何优势?

在当今数字营销时代&#xff0c;Facebook广告已成为企业推广产品和服务的重要渠道。而为了更好地利用这一平台&#xff0c;广告主们需要理解不同类型的Facebook广告账户。Facebook广告账户根据其属性可分为多种类型&#xff0c;包括个人广告账户、企业管理&#xff08;BM&#…

Qt 2D绘图之三:绘制文字、路径、图像、复合模式

参考文章链接: Qt 2D绘图之三:绘制文字、路径、图像、复合模式 绘制文字 除了绘制图形以外,还可以使用QPainter::darwText()函数来绘制文字,也可以使用QPainter::setFont()设置文字所使用的字体,使用QPainter::fontInfo()函数可以获取字体的信息,它返回QFontInfo类对象…

一种多功能调试工具设计方案开源

一种多功能调试工具设计方案开源 设计初衷设计方案具体实现HUB芯片采用沁恒微CH339W。TF卡功能网口功能SPI功能IIC功能JTAG功能下行USB接口 安路FPGA烧录器功能Xilinx FPGA烧录器功能Jlink OB功能串口功能RS232串口RS485和RS422串口自适应接口 CAN功能烧录器功能 目前进度后续计…

【C++】深入优化计算题目分析与实现

博客主页&#xff1a; [小ᶻ☡꙳ᵃⁱᵍᶜ꙳] 本文专栏: C 文章目录 &#x1f4af;前言&#x1f4af;第一题&#xff1a;圆的计算我的代码实现代码分析改进建议改进代码 老师的代码实现代码分析可以改进的地方改进代码 &#x1f4af;第二题&#xff1a;对齐输出我的代码实现…

动手学深度学习10.5. 多头注意力-笔记练习(PyTorch)

本节课程地址&#xff1a;多头注意力代码_哔哩哔哩_bilibili 本节教材地址&#xff1a;10.5. 多头注意力 — 动手学深度学习 2.0.0 documentation 本节开源代码&#xff1a;...>d2l-zh>pytorch>chapter_multilayer-perceptrons>multihead-attention.ipynb 多头注…

大R玩家流失预测在休闲社交游戏中的应用

摘要 预测玩家何时会离开游戏为延长玩家生命周期和增加收入贡献创造了独特的机会。玩家可以被激励留下来&#xff0c;战略性地与公司组合中的其他游戏交叉链接&#xff0c;或者作为最后的手段&#xff0c;通过游戏内广告传递给其他公司。本文重点预测休闲社交游戏中高价值玩家…

软件质量保证——单元测试之白盒技术

笔记内容及图片整理自XJTUSE “软件质量保证” 课程ppt&#xff0c;仅供学习交流使用&#xff0c;谢谢。 程序图 程序图定义 程序图P&#xff08;V,E&#xff09;&#xff0c;V是节点的集合&#xff08;节点是程序中的语句或语句片段&#xff09;&#xff0c;E是有向边的集合…