目录
1、环境部署
2、教程
3、demo
1、环境部署
我的开发环境是 ubuntu18.04
编译工具:g++
GTK版本:3.0
GTK的安装方法见链接:
ubuntu1604安装GTK+_炎芯随笔的博客-CSDN博客_gtk+ linuxUbuntu上安装GTK+3.0的命令只有4条,而且安装速度很快,构建GTK+3.0的开发环境很方便。https://blog.csdn.net/qq_40904479/article/details/123707920
2、教程
具体的使用方法可以看官方文档,里面有详细的使用方法介绍。
The GTK Project - A free and open-source cross-platform widget toolkithttps://www.gtk.org/docs/getting-started/Gtk – 3.0https://docs.gtk.org/gtk3/
3、demo
我的需求是在ubuntu上开发一个文件拷贝的程序,需要界面输入源路径和目的路径。整体来说需求很简单,需要两个目录选择的控件和一个提交按钮。
#include#include #include using namespace std; typedef struct _folderPath{ void *srcfolder; void *dstfolder; }folderPath; static folderPath *path; // gcc -o demo gtk_1.c `pkg-config --cflags --libs gtk+-3.0` static void publisher (GtkWidget *widget, gpointer data) { folderPath *path = (folderPath *)data; char *srcfolderStr = (char *)gtk_file_chooser_get_uri(GTK_FILE_CHOOSER(path->srcfolder)); char *dstfolderStr = (char *)gtk_file_chooser_get_uri(GTK_FILE_CHOOSER(path->dstfolder)); g_print ("src folder: %sndst folder: %sn", srcfolderStr, dstfolderStr); } static void page (GtkApplication *app, gpointer user_data) { GtkWidget *window; GtkWidget *srcFolderSelect, *dstFolderSelect; GtkWidget *confirm; GtkWidget *grid; GtkWidget *srcTextView, *dstTextView; GtkTextBuffer *srcTextBuffer, *dstTextBuffer; // default path string char folderpath[50] = "/home"; // window window = gtk_application_window_new (app); gtk_window_set_title (GTK_WINDOW (window), "Publisher"); gtk_container_set_border_width(GTK_CONTAINER(window), 10); // container grid = gtk_grid_new(); gtk_container_add (GTK_CONTAINER (window), grid); // view srcTextView = gtk_text_view_new(); dstTextView = gtk_text_view_new(); srcTextBuffer = gtk_text_view_get_buffer(GTK_TEXT_VIEW(srcTextView)); dstTextBuffer = gtk_text_view_get_buffer(GTK_TEXT_VIEW(dstTextView)); // Src Folder selector gtk_text_buffer_set_text(srcTextBuffer, "Src Folder : ", -1); // select folder srcFolderSelect = gtk_file_chooser_button_new ("", GTK_FILE_CHOOSER_ACTION_SELECT_FOLDER); // default path gtk_file_chooser_set_current_folder (GTK_FILE_CHOOSER (srcFolderSelect), folderpath); // add to grid gtk_grid_attach(GTK_GRID(grid), srcTextView, 2, 1, 1, 1); gtk_grid_attach(GTK_GRID(grid), srcFolderSelect, 3, 1, 2, 1); // Dst Folder selector gtk_text_buffer_set_text(dstTextBuffer, "Dst Folder : ", -1); dstFolderSelect = gtk_file_chooser_button_new ("", GTK_FILE_CHOOSER_ACTION_SELECT_FOLDER); gtk_file_chooser_set_current_folder (GTK_FILE_CHOOSER (dstFolderSelect), folderpath); gtk_grid_attach(GTK_GRID(grid), dstTextView, 2, 2, 1, 1); gtk_grid_attach(GTK_GRID(grid), dstFolderSelect, 3, 2, 2, 1); // confirm button path->srcfolder = (void *)srcFolderSelect; path->dstfolder = (void *)dstFolderSelect; confirm = gtk_button_new_with_label ("publish"); g_signal_connect (confirm, "clicked", G_CALLBACK (publisher), (void *)path); // add to grid gtk_grid_attach(GTK_GRID(grid), confirm, 2, 3, 3, 1); gtk_widget_show_all (window); } int start() { GtkApplication *app; int status; path = (folderPath *)malloc(sizeof(folderPath)); app = gtk_application_new ("com.yjz.publisher", G_APPLICATION_FLAGS_NONE); g_signal_connect (app, "activate", G_CALLBACK (page), NULL); status = g_application_run (G_APPLICATION (app), 0, NULL); g_object_unref (app); free(path); return status; } int main() { start(); return 0; }
运行编译
gcc -o demo gtk_1.c `pkg-config --cflags --libs gtk+-3.0`



