gui编程介绍
这两天在学习 gtk的东西
windows 环境的gui :
- MFC /c++
- WinForm ,c#
- WPF , c#
linux 环境编程:
- GTK/c
- GTK 已经被 移植到 win环境下了,可以用于开发跨平台应用
- gtk 是 gnome toolkit 缩写
macOS 和 IOS
android
跨平台方案
- 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
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