GTK+2.0编程范例代码分析-第二章(2)

Gtk-ERROR : GTK+ 2.x symbols detected. Using GTK+2.x and GTK+3 in the same process is not support Gtk-ERROR **: GTK+ 2.x symbols detected. Using GTK+ 2.x and GTK+3 in the same process is not support报错:形式1:形式2:原因报错的一般复现解决方案参考文献 程序员遇到这种环境问题的时候前列腺都不好, 记录一下, 方便以后回查~ 报错: 报错有两种形式 形式1: Gtk-ERROR **: GTK+ 2.x symbols detected. Using GTK+ 2.x and GTK+3 in the 阅读详情

转载请注明:http://blog.youkuaiyun.com/hubbybob1/article/details/50034387
本文主要是针对 GTK+2.0编程范例–宋国伟老师的书内的代码做一些注释,兼并讨论一下GTK+3.0与2.0的区别.其安装,在网上有很多讲解.
查看各个函数的的说明,就得看说明文档,下面这个网址很好,是GTK+3.0API的目录:
https://developer.gnome.org/gtk3/stable/
或者下载我上传的3.0说明文档,查看:
http://download.youkuaiyun.com/detail/hubbybob1/9219553

2.3创建工具条
代码toolbar.c如下所示:

//toolbar.c
#include <gtk/gtk.h>

void on_button_clicked(GtkButton* button,gpointer data)
{
        g_print("你点击的按钮是 %s \n",(gchar*)data);
}

int main(int argc, char* argv[])
{
    GtkWidget* window;
    GtkWidget* box;
    GtkWidget* toolbar;
    GtkWidget* entry;
    GtkWidget* lable;//定义菜单条

  gtk_init(&argc,&argv);

 //window       
    window = gtk_window_new(GTK_WINDOW_TOPLEVEL);
    gtk_window_set_title(GTK_WINDOW(window),"添加工具条");
    gtk_container_set_border_width(GTK_CONTAINER(window),20);
    g_signal_connect(G_OBJECT(window),"destroy",G_CALLBACK(gtk_main_quit),NULL);

//box
    box = gtk_vbox_new(FALSE,0);//非均匀排放
    gtk_container_add(GTK_CONTAINER(window),box);

//toolbar
  toolbar = gtk_toolbar_new();
  gtk_toolbar_insert_stock(GTK_TOOLBAR(toolbar),               //工具条 参考注释1
                           GTK_STOCK_NEW,                      //新建图标的系统固有资源
                           "新建一个文件","新建",              //提示信息
                           GTK_SIGNAL_FUNC(on_button_clicked), //回调函数
                           (gpointer)("新建"),-1);             //回调参数, 插入按钮的位置 -1:表示最后,NULL:依次
  gtk_toolbar_insert_stock(GTK_TOOLBAR(toolbar),
                           GTK_STOCK_OPEN,                  //打开图标
                           "打开一个文件","打开",
                           GTK_SIGNAL_FUNC(on_button_clicked),
                           (gpointer)("打开"),-1);
  gtk_toolbar_insert_stock(GTK_TOOLBAR(toolbar),
                           GTK_STOCK_SAVE,                  //保存图标
                           "保存当前文件","保存",
                           GTK_SIGNAL_FUNC(on_button_clicked),
                           (gpointer)("保存"),-1);

  gtk_toolbar_append_space(GTK_TOOLBAR(toolbar));//在工具条内添加竖线间隔

//lable
  lable = gtk_label_new(" 文件名:");
  gtk_toolbar_append_widget(GTK_TOOLBAR(toolbar),lable,"这是一个标签","标签");//添加自己创建你的控件

//entry
  entry = gtk_entry_new();
  gtk_toolbar_append_widget(GTK_TOOLBAR(toolbar),entry,"这是一个录入条","录入");
  gtk_toolbar_append_space(GTK_TOOLBAR(toolbar));

  gtk_toolbar_insert_stock(GTK_TOOLBAR(toolbar),
                           GTK_STOCK_CUT,     
                           "剪切","剪切",
                           GTK_SIGNAL_FUNC(on_button_clicked),
                           (gpointer)("剪切"),-1);
  gtk_toolbar_insert_stock(GTK_TOOLBAR(toolbar),
                           GTK_STOCK_COPY,
                           "复制","复制",
                           GTK_SIGNAL_FUNC(on_button_clicked),
                           (gpointer)("复制"),-1);
  gtk_toolbar_insert_stock(GTK_TOOLBAR(toolbar),
                           GTK_STOCK_PASTE,
                           "粘贴","粘贴",
                           GTK_SIGNAL_FUNC(on_button_clicked),
                           (gpointer)("粘贴"),-1);

  gtk_toolbar_append_space(GTK_TOOLBAR(toolbar));

  gtk_toolbar_insert_stock(GTK_TOOLBAR(toolbar),
                           GTK_STOCK_QUIT,
                           "退出","退出",
                           GTK_SIGNAL_FUNC(on_button_clicked),
                           (gpointer)("退出"),-1);
  gtk_toolbar_set_style(GTK_TOOLBAR(toolbar),GTK_TOOLBAR_ICONS);//设定工具条的外观,参考注释2
  gtk_toolbar_set_icon_size(GTK_TOOLBAR(toolbar),GTK_ICON_SIZE_SMALL_TOOLBAR);//设定工具图标的大小,参考注释3

  gtk_box_pack_start(GTK_BOX(box),toolbar,FALSE,FALSE,0);
  gtk_widget_show_all(window);
  gtk_main();
  return FALSE;


}
//1.最关键的函数是gtk_toolbar_insert_stock, 向工具条内插入库固有资源,
//也就是第2个参数,

/*2.gtk_toolbar_set_style 设定工具条的外观
GTK_TOOLBAR_ICONS         只显示图标
GTK_TOOLBAR_TEXT          只显示文字
GTK_TOOLBAR_BOTH          两个都显示,竖直显示
GTK_TOOLBAR_BOTH_HORIZ    图标与文字并排显示
*/

//3.gtk_toolbar_set_icon_size设定大小的参数如下:
/*enum GtkIconSize
GTK_ICON_SIZE_INVALID        Invalid size.
GTK_ICON_SIZE_MENU           Size appropriate for menus (16px).
GTK_ICON_SIZE_SMALL_TOOLBAR  Size appropriate for small toolbars (16px).
GTK_ICON_SIZE_LARGE_TOOLBAR  Size appropriate for large toolbars (24px)
GTK_ICON_SIZE_BUTTON         Size appropriate for buttons (16px)
GTK_ICON_SIZE_DND            Size appropriate for drag and drop (32px)
GTK_ICON_SIZE_DIALOG         Size appropriate for dialogs (48px)
*/
makefile文件
CC=gcc
all:
   $(CC) -o toolbar toolbar.c `pkg-config --cflags --libs gtk+-2.0`

运行的结果如下:
这里写图片描述
当点击时的打印信息如下:
这里写图片描述
这是2.0的结果,如果使用3.0编译就会出错:
这里写图片描述
因此对于gtk3的代码主要变化是gtk_toolbar_insert取代gtk_toolbar_insert_stock,代码写辑更加简单了,使g_signal_connect来产生回调函数

//toolbar1.c
#include <gtk/gtk.h>
int main( int argc, char *argv[])
{

  GtkWidget *window;
  GtkWidget *vbox;
  GtkWidget *toolbar;
  GtkToolItem *new;
  GtkToolItem *open;
  GtkToolItem *save;
  GtkToolItem *sep;
  GtkToolItem *exit;

  gtk_init(&argc, &argv);

  window = gtk_window_new(GTK_WINDOW_TOPLEVEL);
  gtk_window_set_position(GTK_WINDOW(window), GTK_WIN_POS_CENTER);
  gtk_window_set_default_size(GTK_WINDOW(window), 250, 200);
  gtk_window_set_title(GTK_WINDOW(window), "toolbar");

   vbox = gtk_vbox_new(FALSE, 0);
   gtk_container_add(GTK_CONTAINER(window), vbox);

   toolbar = gtk_toolbar_new();
   gtk_toolbar_set_style(GTK_TOOLBAR(toolbar), GTK_TOOLBAR_ICONS);

   gtk_container_set_border_width(GTK_CONTAINER(toolbar), 2);

   new = gtk_tool_button_new_from_stock(GTK_STOCK_NEW);
   gtk_toolbar_insert(GTK_TOOLBAR(toolbar), new, -1);

   open = gtk_tool_button_new_from_stock(GTK_STOCK_OPEN);
   gtk_toolbar_insert(GTK_TOOLBAR(toolbar), open, -1);

   save = gtk_tool_button_new_from_stock(GTK_STOCK_SAVE);
   gtk_toolbar_insert(GTK_TOOLBAR(toolbar), save, -1);

   sep = gtk_separator_tool_item_new();
   gtk_toolbar_insert(GTK_TOOLBAR(toolbar), sep, -1); 

   exit = gtk_tool_button_new_from_stock(GTK_STOCK_QUIT);
   gtk_toolbar_insert(GTK_TOOLBAR(toolbar), exit, -1);

   gtk_box_pack_start(GTK_BOX(vbox), toolbar, FALSE, FALSE, 5);

   g_signal_connect(G_OBJECT(exit), "clicked",  G_CALLBACK(gtk_main_quit), NULL);

   g_signal_connect_swapped(G_OBJECT(window), "destroy",  G_CALLBACK(gtk_main_quit), NULL);

   gtk_widget_show_all(window);
   gtk_main();
   return 0;
}//编译代码
gcc -o toolbar1 toolbar1.c `pkg-config --cflags --libs gtk+-3.0`

运行的结果:
这里写图片描述
系统图标有很多,主要在gtk3-Stock-Items.html内会有定义,下面列出了一些
这里写图片描述

Windows下通过Dev-C++配置GTK+3.0编程环境 目前本人在学习linux下的GTK+3.0,编好的程序很想移植到windows上使用,所以就到网上搜索了大量文章,其中VS2015和GTK+3.0组合方式始终无法调试成功,后来发现Dev-C++和GTK+3.0的组合方式勉强能用,现将细节说一下:一、软件准备 (一)使用系统windows7 64位。 (二)下载Dev-C++5.11,搜索官网https://dev-c.soft32.com/fre... 阅读详情

相关推荐

GTK+编程入门(2)—GTK+程序结构

GTK+编程入门(2)—GTK+程序结构(2015-7-23)分类:GTK+  现在是晚上,快到睡觉时间了。把这小节完整看完是不可能了,索性就先开个头。这节的内容是通过一个最简单的GTK+程序的分析来了解GTK+程序的基本结构。   该程序如下所示:#include <gtk/gtk.h> int main(int argc, char *argv[]) { //声明一个窗口构件

LazyBone1994的博客 1863

GTK+2.0编程范例代码分析-第一章(1)

转载请注明:http://blog.csdn.net/hubbybob1/article/details/49159581 本文主要是针对 –GTK+2.0编程范例–宋国伟老师的书内的代码做一些注释,兼并讨论一下GTK+3.0与2.0的区别.其安装,在网上有很多讲解. 第1章 窗口与简单控件1.1最简单的窗口 程序如下base.c/*simple windows_base.c*/ #incl

hubbybob1专栏 1472

Windows 11 安装GTK+3.0 和VScode开发GTK+3.0配置

windows11安装GTK+3.0及在VScode配置GTK+3.0开发环境,验证调试及运行GTK+3.0程序。

weixin_41738640的博客 1960

第133页的gtk+编程例子——计算器应用改写网上的例子用gtk4编译

第133页的gtk+编程例子——计算器应用改写网上的例子用gtk4编译

weixin_42145772的博客 465

Win64 GTK+3编程【2】GTK+3完…

软件和包下载步骤: 首先是开发环境,选用Dev-cpp 5.11,下载地址:http://sourceforge.net/projects/orwelldevcpp/ 其次是GTK+3的打包文件,这里选择其首页的下载页的win64 bit页面,下载地址:all-in-one bundle   首先安装dev-cpp,安装过程跟以前一样。基本不需要什么繁琐的配置,第一次运行的时候会让用户选择主

flash胜龙的博客 2217

gtk_固定布局

在linux下用C语言开发,可以直接运行

gtk gdk 事件 信号分析

Gtk事件与信号关系   --分析中相关的源码包 gtk+2.0-2.12.9       Gtk所提供的工具库与Gtk应用程序与都是基于事件触发机制来管理。所有的Gtk应用程序都是基于事件驱动,如果没有事件发生,应用程序将处于等待状态,不会执行任何操作,一旦事件发生,将根据不同的事件做出相应的处理。在GTK+中,一个事件就是从X Server传出来的一个信息。当一个事件发

qq550764107的专栏 1013

GTK+2.0编程范例

一本范例,有大量的实例来讲解linux下GUI的编程技术。

GTK+2.0编程范例代码分析-第二章(1)

转载请注明:http://blog.csdn.net/hubbybob1/article/details/49466979 本文主要是针对 GTK+2.0编程范例–宋国伟老师的书内的代码做一些注释,兼并讨论一下GTK+3.0与2.0的区别.其安装,在网上有很多讲解. 查看各个函数的的说明,就得看说明文档,下面这个网址很好,是GTK+3.0API的目录: https://developer.gn

hubbybob1专栏 2675

GTK+2.0编程范例-书籍和书中代码.tar.gz

GTK+2.0编程范例-书籍和书中代码.tar.gz GTK+2.0编程范例 书本比较清晰 加上有代码 GTK入门和提高必备

gtk图形化界面代码分析

glib库是linux平台下最常用的c语言函数库,它具有很好的可移植性和实用性。glib是gtk+库和gnome的基础。glib的各种实用程序具有一致的接口。glib为许多标准的、常用的C语言结构提供了相应的替代物。它的编码风格是半面向对象,标识符加了一个前缀“g”,这也是一种通行的命名约定。使glib库的程序都应该包含glib的头文件glib.h。如果程序已经包含了gtk .h则不需要再包含glib.h。

GTK+2.0编程范例代码分析-第一章(3)

转载请注明:http://blog.csdn.net/hubbybob1/article/details/49429067 本文主要是针对 GTK+2.0编程范例–宋国伟老师的书内的代码做一些注释,兼并讨论一下GTK+3.0与2.0的区别.其安装,在网上有很多讲解. 查看各个函数的的说明,就得看说明文档,下面这个网址很好,是GTK+3.0API的目录: https://developer.gn

hubbybob1专栏 1701

《GTK+2.0编程范例》配套示例代码 1.1 最简单的窗口

《GTK+2.0编程范例》配套示例代码 1.1 最简单的窗口

GTK+-2.0 的安装

声明:本文是自己昨天安装GTK+-2.0的经历,完全是安装下面步骤来的,现记录下来,方便以后查看。 本机系统是Ubuntu10.04。vim&gcc&gdb&make&kg-config等基本编程工具都已经安装完毕。 Ubuntu 上开发gtk+2.0的程序,需要安装相应的头文件和库。 1、在控制台窗口输入sudo apt-get install libgtk2.0*,

嵌入式学习交流平台 7815

基于Gtk+的Linux图形界面任务管理器

包括源码+Makefile+程序+实验报告.程序在Ubuntu9.10系统正常运行。

GTK + 2.0教程GTK+ 2.0 Tutorial

有关如何通过其C接口使用GTK(GIMP工具包)的教程。

GTK+2.0编程范例代码分析-第一章(2)

转载请注明:http://blog.csdn.net/hubbybob1/article/details/49248165 本文主要是针对 –GTK+2.0编程范例–宋国伟老师的书内的代码做一些注释,兼并讨论一下GTK+3.0与2.0的区别.其安装,在网上有很多讲解. 1.6带图像和快捷键的按钮 这一节是第四小结的延续,在源程序的基础上给窗口接一个背景,需要添加一个layout控件:程序如下:/

hubbybob1专栏 1361

【文本分析学习】Anaconda+pytorch虚拟环境下的pycharm文本分析(含分词、词性标注、词形归一化、停用词、文本情感分析、词频、文本相似度,附数据代码) NLTK

文本分析学习之 Anadconda+pytorch虚拟环境下的pycharm文本分析(含分词、词性标注、词形归一化、停用词、文本情感分析、词频、文本相似度,附数据代码)

littlexmj的博客 2333

GTK+3.0相较与GTK+2.0下创建盒的变化

在学习使用Glade软件创建盒的过程中,发现GTK+3.0已经取消了gtk_hbox_new()和gtk_vbox_new(),只需要在常规选项里面修改横向和垂直即可。但为了弄懂GTK+3.0与GTK+3.0的不同,还是查阅了一些资源,主要区别如下: 一、GTK+2.0 横向盒gtk_hbox_new(gboolean homogeneous,gint spacing); 纵向盒gtk_vb...

qq_43037374的博客 2359

AST实战:解密Akamai混淆JS代码的完整流程

本文详细解析了如何使用AST技术解密Akamai混淆的JS代码,包括定位关键代码、AST解混淆实战步骤及常见问题解决方案。通过实际案例演示了从混淆代码到清晰逻辑的完整处理流程,并提供了工具推荐和法律合规建议,帮助开发者有效应对反爬虫技术。

weixin_33725722的博客 325

XPe开发初体验(一)XPe概述

XP Embedded是微软Windows Embedded产品线中非常重要的一环,不过比起大名鼎鼎的Windows Embedded CE,XPe显得过于低调了。在接下来的一段时间里,我希望能够用六篇的篇幅来描述一下XPe的整个开发过程。这个系列文章主要是针对有Windows编程经验,但是没有嵌入式开发经验的开发者,提供一些概念和开发过程的初步介绍。XP Embedded是一个基于Windo

aawolf = new Mobile.MVP 1万+
上一篇: 解决绕过android下apk使用usb设备权限查询相应问题,自动获取usb权限
下一篇: Linux U盘分区格式化 fdisk命令
葫芦娃二娃
博客等级 码龄15年 1850粉丝 69原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值