linux下使用C语言进行GTK桌面程序开发

linux下使用C语言进行GTK桌面程序开发,第1张

目录

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: %s\ndst folder: %s\n", 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`

欢迎分享,转载请注明来源:内存溢出

原文地址:https://54852.com/langs/874755.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2022-05-13
下一篇2022-05-13

发表评论

登录后才能评论

评论列表(0条)

    保存