Linux GTK

2023-11-16

更新国内源

sudo cp /etc/apt/sources.list /etc/apt/sources.list.backup
sudo gedit /etc/apt/sources.list 

清华大学开源软件镜像站 : https://mirror.tuna.tsinghua.edu.cn/help/ubuntu/

sudo apt-get update
sudo apt-get upgrade

GTK2.0的安装

apt-get install build-essential #这将安装gcc/g++/gdb/make 等基本编程工具
apt-get install gnome-core-devel #这将安装 libgtk2.0-dev libglib2.0-dev 等开发相关的库文件
apt-get install pkg-config #用于在编译GTK程序时自动找出头文件及库文件位置
apt-get install devhelp #这将安装 devhelp GTK文档查看程序
apt-get install libglib2.0-doc libgtk2.0-doc #这将安装 gtk/glib 的API参考手册及其它帮助文档
apt-get install glade libglade2-dev #这将安装基于GTK的界面GTK是开发Gnome窗口的c/c++语言图形库
apt-get install libgtk2.0*, gtk+2.0所需的所有文件统通下载安装完毕。

#include <stdio.h>
#include <gtk/gtk.h>

int main(int argc,char *argv[])
{
    GtkWidget *window;
    gtk_init(&argc,&argv);
    
    window = gtk_window_new(GTK_WINDOW_TOPLEVEL);
    gtk_widget_show(window);
    
    gtk_main();
    return 0;
}
gcc test.c `pkg-config --cflags --libs gtk+-2.0`

GTK3.0的安装

sudo apt-get install build-essential
sudo apt-get install gnome-core-devel
sudo apt-get install libgtk-3-dev
sudo apt-get install pkg-config
sudo apt-get install glade
pkg-config --cflags --libs gtk±3.0
pkg-config --modversion gtk±3.0

#include <gtk/gtk.h>

static void
activate (GtkApplication* app,
          gpointer        user_data)
{
  GtkWidget *window;

  window = gtk_application_window_new (app);
  gtk_window_set_title (GTK_WINDOW (window), "Window");
  gtk_window_set_default_size (GTK_WINDOW (window), 200, 200);
  gtk_widget_show_all (window);
}

int
main (int    argc,
      char **argv)
{
  GtkApplication *app;
  int status;

  app = gtk_application_new ("org.gtk.example", G_APPLICATION_FLAGS_NONE);
  g_signal_connect (app, "activate", G_CALLBACK (activate), NULL);
  status = g_application_run (G_APPLICATION (app), argc, argv);
  g_object_unref (app);

  return status;
}
gcc `pkg-config --cflags gtk+-3.0` -o main.out main.c `pkg-config --libs gtk+-3.0`

CLION配合GTK开发

原始CMakeLists.txt文件

cmake_minimum_required(VERSION 3.19)
project(untitled_c C)

set(CMAKE_C_STANDARD 99)

add_executable(untitled_c main.c)

修改后的CMakeLists.txt文件

cmake_minimum_required(VERSION 3.19)
project(untitled_c C)

set(CMAKE_C_STANDARD 99)

FIND_PACKAGE(PkgConfig REQUIRED) // 配置
PKG_CHECK_MODULES(GTK3 REQUIRED gtk+-3.0) // 模块

INCLUDE_DIRECTORIES(${GTK3_INCLUDE_DIRS}) // gtk目录
LINK_DIRECTORIES(${GTK3_LIBRARY_DIRS}) // gtk链接

add_executable(untitled_c main.c)

TARGET_LINK_LIBRARIES(untitled_c ${GTK3_LIBRARIES}) // gtk的lib

添加按钮

static
void
activate(
        GtkApplication *app,    // gtk_application_new result value
        gpointer user_data)     //
{
    GtkWidget *window;
    GtkWidget *button;
    GtkWidget *button_box;

    window = gtk_application_window_new(app);
    gtk_window_set_title(GTK_WINDOW(window),"SSO Demo");
    gtk_window_set_default_size(GTK_WINDOW(window),600,200);

    button_box = gtk_button_box_new(GTK_ORIENTATION_HORIZONTAL);
    gtk_container_add(GTK_CONTAINER(window),button_box);

    button = gtk_button_new_with_label("SSO");
    g_signal_connect_swapped(button,"clicked",G_CALLBACK(gtk_widget_destroy),window);
    gtk_container_add(GTK_CONTAINER(button_box),button);

    gtk_widget_show_all(window);
}

指定位置的按钮

static
void
activate(
        GtkApplication *app,    // gtk_application_new result value
        gpointer user_data)     //
{
    GtkWidget *window;
    GtkWidget *button;
    GtkWidget *fixed;

    window = gtk_application_window_new(app);
    gtk_window_set_title(GTK_WINDOW(window),"SSO Demo");
    gtk_window_set_default_size(GTK_WINDOW(window),600,200);

    fixed = gtk_fixed_new();
    gtk_container_add(GTK_CONTAINER(window),fixed);

    button = gtk_button_new_with_label("SSO");
    g_signal_connect_swapped(button,"clicked",G_CALLBACK(gtk_widget_destroy),window);
    gtk_fixed_put(GTK_FIXED(fixed),button,20,20);

    gtk_widget_show_all(window);
}

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Linux GTK 的相关文章

  • 在 HKCR 中创建新密钥有效,但不起作用

    我有以下代码 它返回 成功 但使用两种不同的工具使用搜索字符串 3BDAAC43 E734 11D5 93AF 00105A990292 搜索注册表不会产生任何结果 RegistryKey RK Registry ClassesRoot C
  • Rx.NET 中是否有一个Subject 实现,其功能类似于BehaviourSubject,但仅在值发生更改时才发出?

    有没有Subject https learn microsoft com en us previous versions dotnet reactive extensions hh229699 v vs 103 Rx NET 中的实现在功能
  • 现代 C++ 编译器是否能够在某些情况下避免调用 const 函数两次?

    例如 如果我有以下代码 class SomeDataProcessor public bool calc const SomeData d1 const SomeData d2 const private Some non mutable
  • 从复选框列表中选择循环生成的复选框中的一个复选框

    抱歉我的英语不好 在我的 ASP NET 网站上 我从 SQL 表导入软件列表 看起来像这样 但实际上要长得多 Microsoft Application Error Reporting br br Microsoft Applicatio
  • 如何将 SOLID 原则应用到现有项目中

    我对这个问题的主观性表示歉意 但我有点卡住了 我希望之前处理过这个问题的人能够提供一些指导和建议 我有 现在已经成为 一个用 C 2 0 编写的非常大的 RESTful API 项目 并且我的一些类已经变得巨大 我的主要 API 类就是一个
  • extern 声明和函数定义都在同一文件中

    我只是浏览了一下gcc源文件 在gcc c 我发现了类似的东西 extern int main int char int main int argc char argv 现在我的疑问是extern是告诉编译器特定的函数不在这个文件中 但可以
  • C++中判断unicode字符是全角还是半角

    我正在编写一个终端 控制台 应用程序 该应用程序应该包装任意 unicode 文本 终端通常使用等宽 固定宽度 字体 因此要换行文本 只需计算字符数并观察单词是否适合一行并采取相应的操作 问题是 Unicode 表中的全角字符在终端中占用了
  • 如何使用 x64 运行 cl?

    我遇到了和这里同样的问题致命错误 C1034 windows h 未设置包含路径 https stackoverflow com questions 931652 fatal error c1034 windows h no include
  • 如何将AVFrame转换为glTexImage2D使用的纹理?

    如您所知 AVFrame 有 2 个属性 pFrame gt data pFrame gt linesize 当我从视频 sdcard test mp4 android平台 读取帧后 并将其转换为RGB AVFrame副 img conve
  • 如何递归取消引用指针(C++03)?

    我正在尝试在 C 中递归地取消引用指针 如果传递一个对象 那就是not一个指针 这包括智能指针 我只想返回对象本身 如果可能的话通过引用返回 我有这个代码 template
  • 不可变类与结构

    以下是类与 C 中的结构的唯一区别 如果我错了 请纠正我 类变量是引用 而结构变量是值 因此在赋值和参数传递中复制结构的整个值 类变量是存储在堆栈上的指针 指向堆上的内存 而结构变量作为值存储在堆上 假设我有一个不可变的结构 该结构的字段一
  • C++ - 多维数组

    处理多维数组时 是否可以为数组分配两种不同的变量类型 例如你有数组int example i j 有可能吗i and j是两种完全不同的变量类型 例如 int 和 string 听起来您正在寻找 std vector
  • 将 Word 转换为 PDF - 禁用“保存”对话框

    我有一个用 C 编写的 Word 到 PDF 转换器 除了一件事之外 它工作得很好 有时 在某些 Word 文件上 后台会出现一条消息保存源文件中的更改 gt 是 否 取消 但我没有对源文件进行任何更改 我只想从 Word 文件创建 PDF
  • Oauth2中如何同时撤销RefreshToken和使AccessToken失效

    我正在使用 Owin Oauth2 授权和资源服务器相同 开发单页面应用程序 AngularJS Net MVC Json Rest API 的身份验证流程 我选择了 Bearer Token 路由而不是传统的 cookie session
  • 比较:接口方法、虚方法、抽象方法

    它们各自的优点和缺点是什么 接口方法 虚拟方法 抽象方法 什么时候应该选择什么 做出这一决定时应牢记哪些要点 虚拟和抽象几乎是一样的 虚方法在基类中有一个实现 可以选择重写 而抽象方法则没有 并且must在子类中被覆盖 否则它们是相同的 在
  • C++ 对象用 new 创建,用 free() 销毁;这有多糟糕?

    我正在修改一个相对较大的 C 程序 不幸的是 并不总是清楚我之前的人使用的是 C 还是 C 语法 这是在一所大学的电气工程系 我们 EE 总是想用 C 来做所有事情 不幸的是 在这种情况下 人们实际上可以逃脱惩罚 但是 如果有人创建一个对象
  • 使动态创建的链接标签在 Winforms 中可点击

    我正在制作一个程序 允许用户单击由动态链接标签创建的公司名称 在我想知道如何做到这一点之前 我从未在 C 中使用过链接标签 可为特定用户生成的业务数量各不相同 因此每个用户的链接标签数量并不相同 然后我想捕获业务 ID 以进行 Json 调
  • WPF DataGrid / ListView 绑定到数组 mvvm

    我们假设你有 N 个整数的数组 表示行数的整数值 在模型中 该整数绑定到视图中的 ComboBox Q1 如何将数组 或数组的各个项目 绑定到 DataGrid 或 ListView 控件 以便 当您更改 ComboBox 值时 只有那么多
  • Visual Studio 2015 - Web 项目上缺少共享项目参考选项卡

    我从 MSDN 订阅升级到 Visual Studio 2015 因为我非常兴奋地阅读有关共享项目的信息 当我们想要做的只是重用代码时 不再需要在依赖项中管理 21382 个 nuget 包 所以我构建了一个测试共享项目 其中包含一些代码
  • C++:二叉树所有节点值的总和

    我正在准备面试 我被一个二叉树问题困住了 我们如何计算二叉树所有节点中存在的值的总和 优雅的递归解决方案 伪代码 def sum node if node NULL return 0 return node gt value sum nod

随机推荐

  • JAVA知识点-BeanUtils.copyProperties() 用法

    本文为转载文章 转载地址 https www cnblogs com ahri gx p 10551340 html 文章只做学习交流使用 欢迎指正 2022 08 10更新 至于谁赋值给谁 看你导的包 package org spring
  • 二叉链表之寻找两节点的最近公共祖先☆

    题目 p q分别为指向该二叉树中任意两个节点的指针 试编写算法ancestor root p q r 找到p q的最近公共祖先节点r 分析 上一道题其实可以给我们一些启示 就是我们可以将任意节点的祖先存起来 那这里我们也可以用两个栈 分别将
  • Column 2 has an invalid name and/or length

    不要和我说你不认识英文 哈哈 不认识英文就去学 https archive sap com discussions thread 3878660 Hello I just got an SAP incident which looks si
  • python爬虫简单js逆向

    python爬虫简单js逆向案例 内容简介 一 找到包含所需数据的ajax数据包 二 通过浏览器工具进行关键字定位 三 分析相关js文件 找出具体实现方式 1 getApiKey 函数 2 encryptApiKey 函数 3 encryp
  • jsp中标签id和name的区别

    name原来是为了标识之用 但是现在根据规范 都建议用id来标识元素 但是name在以下用途是不能替代的 1 表单 form 的控件名 提交的数据都用控件的name而不是id来控制 因为有许多name会同时对应多个控件 比如checkbox
  • 二十、线程安全

    文章目录 一 线程安全 一 概念 二 线程安全之临界资源 三 线程安全之可重入函数 1 基本概念 2 实例 二 线程和fork 一 fork后子进程线程数量 二 fork后子进程锁的处理 一 线程安全 一 概念 线程安全 就是在多线程运行的
  • 【Locomotor运动模块】抓取:按朝向抓取(Orientation Handler)案例

    文章目录 案例 原理 案例 左右手柄抓宝剑时 宝剑的朝向不同 L35 一个手柄对应一个抓取点 原理 1 左右手柄分别抓取的是宝剑上的不同抓取点 GenericOrientation Handle通用朝向把手 它是我们设置 按朝向抓取 Ori
  • 11月1日任务

    11月1日任务 10 32 10 33 rsync通过服务同步 10 34 linux系统日志 10 35 screen工具 扩展 1 Linux日志文件总管logrotate http linux cn article 4126 1 ht
  • L2TP详解(二)

    今天继续给大家介绍HCIE安全 本文给大家介绍的是L2TP相关内容 包括L2TP的特点和应用场景 强烈推荐阅读本文前置文章 L2TP详解 一 一 L2TP隧道和会话建立过程 在LAC和LNS之间存在着两种类型的链接 隧道链接和会话链接 隧道
  • 很详细的系列Shell基础— Shell简介

    一 Shell的由来 我们比较熟悉Windows系统的图形化界面 对于图形界面来说 用户点击某个图标就能启动某个程序 在此之前我们一直在使用Linux系统的命令行模式学习 对于命令行来说 用户输入一个命令就能启动某个程序 这两者的基本过程都
  • 图解CRM(客户关系管理)全流程

    在不同场合下 CRM 客户关系管理 可能是一个管理学术语 也可能是一个软件系统 我们通常所指的CRM 指用计算机自动化分析销售 市场营销 客户服务以及应用等流程的软件系统 通俗地说 CRM就是利用软件 硬件和网络技术 为企业建立一个客户信息
  • 测试开发工程师面试总结(一)——Java基础篇

    本文面向对象 测试开发工程师 服务端自动化方向 随手百度一下都能找到 岗位面试总结 但是有关测开岗位的面试总结却寥寥无几 总体原因可能是这两个 1 测试行业整体水平参差不齐 导致不同公司面试的问题不能抽象出来写概览 2 很多做测开的人可能内
  • IDEA maven项目依赖无法解析问题

    这篇文章主要介绍了IDEA maven项目依赖无法解析问题 具有很好的参考价值 希望对大家有所帮助 如有错误或未考虑完全的地方 望不吝赐教 目录 IDEA maven项目依赖无法解析 问题排除 配置文件setting xml内容是否正确 p
  • export ‘default‘ (imported as ‘components‘) was not found in

    vue自己写了组件文件包components爆了这个错 原因是components文件夹下的index js文件 import tabbar from tabbar export default tabbar 没有default关键字 加上
  • nodejs 控制台美化 console-color-mr

    console color mr插件可以让node控制台输出带有颜色 是一个不错的插件 通过颜色可以更直观的分析程序bug 一 使用 npm install D console color mr 方法一 import console col
  • 直流电机驱动

    1 直流电机是一种将电能转化为机械能的装置 一般的直流电机有两个电极 当电极正接时 电机正转 当电机反接时 电机反转 2 PWM 脉冲宽度调制 PWM调速的原理就是 我让他转5us 停1us表示转速快 相反 我让他转1us 停5us表示慢
  • nokia专业显示器测试软件,Nokia Monitor Test(

    Nokia Monitor Test 显示器测试软件 是一款计算机显示屏的专业测试工具 使用Nokia Monitor Test 显示器测试软件 可以检测显示器的亮度 对比度 色纯 聚焦 水波纹 抖动 可读性等重要显示效果和技术参数 而这些
  • 以太坊的安装、私有链创世区块搭建以及智能合约的部署

    相关阅读 区块链项目 区块链网上安全商铺 合约代码 前端 后台 文章目录 1 以太坊的安装 私有链创世区块搭建 私有链节点的加入 1 1 以太坊的安装 1 2 私有链创世区块搭建 1 3 私有链节点的加入 2 对getBlock中所得区块的
  • Spring中的事物源码解析

    目录 前言 xml方式 注解的方式 代理对象 事物执行 前言 在Spring中 使用事物的方式基本上都是通过声明 Transactional来完成的 xml方式 在xml的IOC容器中
  • Linux GTK

    更新国内源 sudo cp etc apt sources list etc apt sources list backup sudo gedit etc apt sources list 清华大学开源软件镜像站 https mirror