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

目录

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 toolkiticon-default.png?t=M3K6https://www.gtk.org/docs/getting-started/Gtk – 3.0icon-default.png?t=M3K6https://docs.gtk.org/gtk3/

3、demo

        我的需求是在ubuntu上开发一个文件拷贝的程序,需要界面输入源路径和目的路径。整体来说需求很简单,需要两个目录选择的控件和一个提交按钮。

#include <iostream>
#include <malloc.h>
#include <gtk/gtk.h>

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`
  • 2
    点赞
  • 12
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

我要出家当道士

打赏是不可能,这辈子都不可能

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值