IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 系统运维 -> linux下使用C语言进行GTK桌面程序开发 -> 正文阅读

[系统运维]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`
  系统运维 最新文章
配置小型公司网络WLAN基本业务(AC通过三层
如何在交付运维过程中建立风险底线意识,提
快速传输大文件,怎么通过网络传大文件给对
从游戏服务端角度分析移动同步(状态同步)
MySQL使用MyCat实现分库分表
如何用DWDM射频光纤技术实现200公里外的站点
国内顺畅下载k8s.gcr.io的镜像
自动化测试appium
ctfshow ssrf
Linux操作系统学习之实用指令(Centos7/8均
上一篇文章      下一篇文章      查看所有文章
加:2022-05-09 13:09:20  更:2022-05-09 13:11:53 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/15 18:50:08-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码