gui编程介绍

这两天在学习 gtk的东西

windows 环境的gui :

  • MFC /c++
  • WinForm ,c#
  • WPF , c#

linux 环境编程:

  • GTK/c
    • GTK 已经被 移植到 win环境下了,可以用于开发跨平台应用
    • gtk 是 gnome toolkit 缩写

macOS 和 IOS

  • object-c/swift

android

  • java/kotlin

跨平台方案

  • electron/javascript 框架
  • QT/c++
  • flutter/dart

其他语言也可以使用 GTK的框架

安装 GTK 环境

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
# 在 msys2 环境安装比较方便
pacman -S mingw-w64-x86_64-gtk3

pkg-config --list-all | grep gtk

# 记得安装图标,默认是没有图标的
pacman -S mingw-w64-x86_64-adwaita-icon-theme-3.36.0-1 
pacman -S mingw-w64-x86_64-hicolor-icon-theme

# 安装 图形界面编辑工具,拖拽可视化布局更方便
pacman -S mingw-w64-x86_64-glade

gui主题下载

参考文档

中文版手册:
https://www.bookstack.cn/read/GTK-3-Chinese-Reference-Manual/content-basic.md
英文原版:
https://developer.gnome.org/gtk3/stable/

vscode 插件配置

参考教程 参考文档

安装插件C/C++、Code Runner、GitLens和Snippet Generator(作者为fiore)

编辑 setttings.json 参考github 链接

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
{
    ///////////////////////////////////////////////////
    //其余配置//////////////////////////////////////////
    //////////////////////////////////////////////////
    //C/C++配置
    //使用C/C++自带格式化工具
    "[cpp]": {
        "editor.defaultFormatter": "ms-vscode.cpptools"
    },
    //Code Runner配置
    //清除上一次运行的结果
    "code-runner.clearPreviousOutput": true,
    //每一次运行前保存一下文件
    "code-runner.saveAllFilesBeforeRun": true,
    //cpp文件应该执行的命令
    "code-runner.executorMap": {
        // "cpp": "cd $dir && clang++ $fileName -o bin\\$fileNameWithoutExt.exe -std=c++17 && $dirbin\\$fileNameWithoutExt.exe"
        "javascript": "node",
        "java": "cd $dir && javac \"$fileName\" && java \"./$fileNameWithoutExt\"",
        "c": "cd $dir && gcc \"$fileName\" -o \"$fileNameWithoutExt\" && \"./$fileNameWithoutExt\"",
        "cpp": "cd $dir && g++ \"$fileName\" -o \"$fileNameWithoutExt\" && \"./$fileNameWithoutExt\"",
        "objective-c": "cd $dir && gcc -framework Cocoa \"$fileName\" -o \"$fileNameWithoutExt\" && \"./$fileNameWithoutExt\"",
       
    },
}

cmake 工程配置

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
cmake_minimum_required(VERSION 3.10.2)

get_filename_component(ProjectId ${CMAKE_CURRENT_SOURCE_DIR} NAME)
string(REPLACE " " "_" ProjectId ${ProjectId})
project(${ProjectId} C)

set(CMAKE_C_STANDARD 11)

set(CMAKE_INSTALL_PREFIX install)

if(APPLE)
    set(CMAKE_INSTALL_RPATH @loader_path/../lib)
elseif (UNIX)
    set(CMAKE_INSTALL_RPATH \$ORIGIN/../lib)
endif ()

include(${CMAKE_BINARY_DIR}/conanbuildinfo.cmake)

# conan 会默认忽略所有的 rpath 配置,这样会导致第4节的程序无法运行,因此我们需要添加 KEEP_RPATHS 参数来启动 rpath
conan_basic_setup(KEEP_RPATHS)
# 我们也可以在这里通过 cmake 语法直接设置启动 rpath 如下:
# set(CMAKE_SKIP_RPATH OFF)

include_directories("include")

add_subdirectory(fibonacci)
add_subdirectory(factorial)

file(GLOB files "${CMAKE_CURRENT_SOURCE_DIR}/*.c")
foreach(file ${files})
    get_filename_component(name ${file} NAME)
    add_executable(${name} ${file})

    target_link_libraries(${name}
            factorial
            fibonacci
            ${CONAN_LIBS})

    install(TARGETS ${name} RUNTIME DESTINATION bin)
endforeach()

我是了一下 cmake,一直报错,找不到gtk.h 的目录, 后面直接用 gcc命令编译了

c语言编译的过程

graph LR 源代码-->预处理器--宏替换源代码-->编译器--中间代码-->链接器-->可执行文件
1
2
3
4
5
6
7
gcc  -E main.c  -o main.i 
# 生成 .i 文件,这个是宏展开的文件
gcc -S main.i -o main.s 
# 生成 .s 文件,这个是汇编代码 【这个是精简版的】

gcc -c main.s -o main.o
# 头文件的库 还不能直接运行,需要链接具体的函数实现地址
1
2
3
4
gcc main.c -o main `pkg-config --cflags --libs gtk+-3.0`
# 打包程序 
ldd main.exe 
# 通过 ldd 可以查看 这个 exe 依赖了哪些动态链接库

也可以下载 listdlls.exe 的程序,查看依赖的dll

makefile设置

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
cc = gcc

MAINC = main.c

EXEC = main 


CFLAGS =  `pkg-config --libs --cflags gtk+-3.0`

main:
	${cc}  ${MAINC} -o ${EXEC} ${CFLAGS}

安装 conan

1
pip install conan

gtk 程序一键打包

参考博客

1
2

ldd main.exe | grep mingw64 |awk -F\> '{print $2}' | awk -F' ' '{print $1}' | xargs -I {} cp {} ./

首先把二进制编译出来,放到一个单独的目录下 然后在二进制路径下执行 ldd gtk_texteditor.exe | grep mingw64 |awk -F> ‘{print $2}’ | awk -F’ ’ ‘{print $1}’ | xargs -I {} cp {} ./ 把必要的 dll 拷过来 在当前目录下分别创建 etc/gtk-3.0, share/icons, share/themes, lib 路径 拷贝 /mingw64/share/icons/Adwaita, hicolor =>share/icons 拷贝 /mingw64/lib/gdk-pixbuf-2.0 => lib/ 自己选个主题拷到 share/themes 创建 etc/gtk-3.0/settings.ini 文件 内容模板如下:

1
2
3
4
5
[Settings]
#gtk-application-prefer-dark-theme = false
gtk-theme-name=Adapta-FrostBlue2
#gtk-icon-theme-name=Tela
gtk-font-name=Noto Sans CJK 12

拷贝 /mingw64/bin/gdbus.exe => ./

若不拷贝 lib/gdk-pixbuf-2.0 导致 Unrecognized image file format (gdk-pixbuf-error-quark, 3)

https://www.gtk.org/docs/installations/windows/ https://sourceforge.net/p/mingw-w64/discussion/723797/thread/3b2fa3c3/ https://gitlab.gnome.org/GNOME/gdk-pixbuf/-/issues/159 ———————————————— 版权声明:本文为CSDN博主「false_mask」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。 原文链接:https://blog.csdn.net/false_mask/article/details/113246642

安装 vcpkg包管理工具等

vcpkg