linux图形界面编程(linux 图形界面 c语言)

2026-01-28 09:30:02 :0

linux图形界面编程(linux 图形界面 c语言)

本篇文章给大家谈谈linux图形界面编程,以及linux 图形界面 c语言对应的知识点,文章可能有点长,但是希望大家可以阅读完,增长自己的知识,最重要的是希望对各位有所帮助,可以解决了您的问题,不要忘了收藏本站喔。

本文目录

linux 图形界面 c语言

要达到你老师的要求(有窗口、按钮等),看来就需要用到 Qt, GTK+ 或者 wxWidgets。Qt 和 wxWidgets 是用 C++ 写的。GTK+ 是用 C 编写的面向对象图野粗形接颂坦镇口,是 gimp 和 Gnome 的基础库,你可以考虑它。
你原来写的 C 程序也不能说就全部作废了。输入输出部分肯定是信州作废了,但是核心的代码肯定还是可以用的。其实,既然已经写完了,你还可以考虑图形化界面和字符界面并用的办法,这也是很多 Linux 软件的风格。

linux下的图形界面软件是用什么语言编写的(linux图形化界面知识)

主要有:

GTK,它是C写的一个通用图闷巧形库,GNOME是用它写的;

QT,它是C写的一个类库,KDE是用它写的;

另外还有蚂颂键wxWidget,是一个C的通用图形库,有很多软件是用它樱州写的。

如何在linux下用gtk开发图形界面应用程序

 * 使用 GTK+ 和 Glade 快速开发 Linux 图形界面
  ** GTK+ 简介
  *** 基本概念
  GTK+ 是一种用于创建图形界面的库. 嗯, gnome 用的就是它, 不过并不是说只
  有在 gnome 环境中才能用, 只要系统上装有 GTK 的库 (基本上有图形系统的个
  人机都会有的啦) 就能运行基于 GTK 的程序. 除了 UNIX-like 平台, 它还移植
  到 windows 上, 还有面运歼向嵌入设备的 framebuffer 版本等等.
  GTK 依赖两个重要的库. 一个是 GLib, 这并不是一个图形库, 也和 glibc 不同
  , 它大抵上提供了一些接口以屏蔽系统的不同, 比如 gint 在哪里都是 32bit
  的, 等等; 另一个是 GDK, 它是一个设备无关的图形库, 支持基本的画点, 以及
  与窗口管理器沟通等任务, 由于 GTK 被设计成能在各个平台, 而非仅仅在
  XWindow 环境下使用, 所以这个库也是必要的. 而在他们上面的 GTK 库, 就提
  供了一些 widget --- 可以理解为控件啦, 不过窗口也是一个 widget 的说, 给
  我们使用, 并提供了包装良好的事件响应机制.
  *** GTK+ 开发基础
  要开发基于 GTK 的软件, 必须先安装 GTK+ 的开发包. 检查是否正确安装的办
  法是在安装后执行 ``pkg-config --cflags --libs gtk+-2.0’’, 如果安装不正
  确, 会提示找不到相应的包.
  GTK 本身是基于 C 的库, 当然也有 C++ 等语言的 wrap, 但它的整个体系是面
  向对象的. 其最基本的类是 GObject, GtkObject 继承了它, GtkObject 又派生
  出我们最经常用到的 GtkWidget, 我们使用的所有窗体控件都派生于它. 于是,
  在 C 环境中我们就要手动处理这些类转换, GTK 和底层的 GLib 等提供了一种
  统一的转换方法, 比如把类型为 GtkWidget* 的 button 转换成 GtkButton 形,
  写法是: GTK_BUTTON(button), 就酱子.
  我不打算在这里列一个 GTK 的 hello world 占页面, 这个程序随便 google 一
  下就能找到. 我们可以自己想一想一个图形界面应该如何建立.
  首先我们要进行初始化, GTK 提供了 gtk_init() 作为初始化, 它检查程序参数
  中的一些特定部分, 进行自己的设置. 调用方法如下:
  gtk_init(&argc, &argv);
  将 argc 和 argv 传指针的目的是 gtk_init 会对他们进行加工, 把 GTK 自己
  用到的一些参数抽取出来.
 让念 接着, 我们必须要创建这些控件吧, GTK 中, 创建一个控件会返回一个
  GtkWidget 类型 (或它的派生类) 的指针, 所有创建控件的函数的格式是
  gtk_控件类型_new(参数表). 比如创建一个窗口的坦悄困写法是:
  GtkWidget *window = gtk_window_new(GTK_WINDOW_TOPLEVEL);
  然后, 我们要设定事件响应函数, GTK 中的事件叫做 signal. GTK 的事件响应
  函数接口应该是类似这样的
  void
  destroy(GtkWidget *widget, gpointer data)
  我们把它连入到一个控件中的方法是这样的
  g_signal_connect(G_OBJECT(window), "destroy", G_CALLBACK(destroy), NULL);
  应该很好理解吧.
  我们创建的咚咚, 要说明他们的位置和包含关系, GTK 用 container 来解决这
  个问题, 它可以保证在窗口缩放的时候控件的摆放依然合理, container 的具体
  使用不详细说, 后面经常要跟 container 打交道, 但基本上不用管 C 代码, 嗯
  . 不过其实我们的任何的可视控件都继承自 container, 比如 button 也是一个
  container, 它很多时候装的是一个 GtkLabel, 也就是用来显示纯文本的控件,
  于是我们就能见到一个文本按钮, 嗯. 使用 container 的方法如下.
  gtk_container_add(GTK_CONTAINER(window), button);
  这样 button 就会占满整个 window 的控件, 我们后面可以看到可以用
  GtkVBox, GtkHBox 等 container 分隔窗体.
  好了, 我们可以准备启动程序了, 我们可以用 gtk_widget_show() 来显示各个
  控件, 然后我们就应该进入到所谓的事件响应循环了, 这就要使用 gtk_main().
  在程序运行过程中, 我们要操纵控件, 比如说我们要在一个 entry 控件(文本框
  ) 中取出其中的文字, 这样的操作使用 gtk_控件类型_动作(对象, 参数) 的形
  式完成的, 比如刚才所说的任务, 做法是 gtk_entry_get_text(entry).
  顺便讲讲 GTK 程序的退出, 关闭 GTK 的窗口 (即使是所有窗口) 也不代表程序
  退出, 因为那说到底只是一个界面而已, 我们当然可以使用 exit() 的自爆法退
  出, 但最好还是给 GTK 一个料理后事的机会, 在主窗口的 destroy 事件响应函
  数上用 gtk_main_quit() 就好了.
  编译 GTK 程序的办法也很简单.
  gcc -o foo foo.c `pkg-config --cflags --libs gtk+-2.0`
  ** 使用 Glade 快速定制用户界面
  好了, 说了一堆有的没的, 如果我现在说我上面说的那一堆中的大部分我们都不
  会用到, 是不是觉得偶很歉扁? 前面的介绍只是给大家 GTK 这个库的一些基本
  概念, 概念就好了, 我们倒真的不用拿这些来编程的. 想想, 一个复杂一点的界
  面, 十几个控件, 再加上各种各样的 container, 自己挂事件, 再加上超常的命
  名, 想想都恐怖.
  这时候, Glade 横空出世了! 这是一个可视化的界面器 --- 但它仅仅是一
  个界面器而已, 甚至连代码框也没有给出. 先不管了, 打开 glade (安
  装省略, 饶了我把, 记得装 libglade-dev), 应该很好懂了, 指指点点就能弄好
  一个界面, 然后在属性窗的信号一栏中选取需要的信号, 设定响应函数, 非常好
  弄.
  玩了几分钟, 问题来了, 怎么把它变为程序啊? 提供类似功能的 IDE 如
  Borland C++ Builder, 在点击创建新控件的时候, 我们能即使在代码窗看到自
  动生成的代码, Glade 也可以采用这种形式, 在设计好界面并保存后, 按一下主
  窗口的 build 按钮, 它就自动生成了界面代码, 根本不用自己写的. 打开代码
  目录, callbacks.c 里已经有自动创建的事件响应的空函数, 在里面填处理, 然
  后 configure make 就行了.
  但是, 这样的开发方式还是有问题的. 第一, 自动生成的代码非常复杂, 可是很
  多时候我们还是不能完全不看它, 处理和界面是混在一起了, 理解他们变得困难
  ; 其二, 由于以上的原因, 修改界面变得非常痛苦; 其三, 它给你生成那堆有的
  没的配置文件不一定是你想要的.
  因此 glade 提供了另一种方法, glade 所得的 .glade 文件是一个 XML 文
  件, 其实它已经完整地描述了界面, 我们能否采用一种简单的方式直接载入, 配
  置它呢. 这样做, 我们的代码中就真真正正地去处了烦人的界面生成代码, 而专
  注于处理部分了.
  libglade 正是由于这个而来, 它能很好地完成上面所说的工作. 当我们用
  glade 创建了一个 .glade 界面后, 用这种方法我们就可以建立界面, 运行程序
  了.
  #include 《gtk/gtk.h》
  #include 《glade/glade.h》
  GladeXML *GUI;
  int
  main(int argc, char **argv)
  {
  gtk_init(&argc, &argv);
  /* load the interface */
  GUI = glade_xml_new("frame.glade", NULL, NULL);
  /* connect the signals in the interface */
  glade_xml_signal_autoconnect(GUI);
  /* start the event loop */
  gtk_main();
  return 0;
  }
  剩下的事情很简单, 如果你的 button 的 clicked 控件有一个响应函数
  on_button_clicked, 你写
  void
  on_button_clicked(GtkWidget *widget, gpointer data)
  {
  // balabalabala
  }
  就可以了. 所以, 上面讲的一堆创建界面的方法, 其实大部分时候都用不着.
  由于用到了 libglade, 我们的编译方法变为
  gcc -o foo foo.c `pkg-config --cflags --libs libglade-2.0`
  ** 开发举例
  一个很简单的程序, 密码学对称加密算法要用到的, 如果说是界面, 就是三个文
  本框: 明文, 密码, 密文, 三个按钮, 加密, 解密, 清除, 完了. 为了实验众多
  的算法, 我们加了一个下拉窗口, 用来选择算法. 我把它设计成一个 wrapper
  和框架, 它不实现任何算法, 只是在界面中获取用户输入, 调用外部程序, 并把
  结果显示出来而已. 这样, 实际的算法实现可以用纯 C 写的文本界面程序完成,
  移植起来很方便, 在 windows 随便做个一样的界面做前端就整个移植过去了.
  于是, 我们需要的窗体元素是 GtkEntry, GtkComboBoxEntry, GtkButton, 查查
  手册, 我们用到的界面相关的函数只有以下几个:
  - gtk_entry_get_text(), 用于获取文本框输入
  - gtk_entry_set_text(), 用于在文本框中显示结果
  - gtk_combo_box_get_active_text(), 用于在 ComboBoxEntry (派生自
  ComboBox) 取出用户选中的算法.
  另一个问题是, 他们都需要相应的对象指针做参数, 这应该怎样获得呢? 我们使
  用 glade_xml_get_widget(GUI, "控件名") 就能取得控件了.

Linux操作-关闭图形界面

临时关闭Linux系统的图形界面可以使用"init 3"指令进行操作。如果使用这种方式关闭图形界面,重启系统后图形界面还是会自动开启。

如果想长期关闭图形界面,那么就需要修改系统的配置文件"inittab":

将配置文件中id的值改为3即可,重启系统后就可以看到效果。

这几个数字的含义是:

如果在关闭了图形界面后想临时打开可以使用指令"init 5"或者"startx"进行操作,这两个指令的区别在于"init 5"指令会重启系统但是"startx"不会,所以建议使用"startx"。

Linux中怎么用c/c++做开发可视化程序

一般使用Qt (C++)或者 GTK+(C)的库;

1.比如Qt,安装Qt库以及Qt Creator,在Qt Creator中编译以下程序

#include 《QApplication》
#include 《QMainWindow》
int main(int argc, char *argv)
{
    QApplication a(argc, argv);
  御陪  QMainWindow *w = new QMainWindow();
    a.setActiveWindow(w);
    w-》show();
    return a.exec();
}

你将看到如下窗口:

2. 比如GTK+

#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;
}

编译运行后,你也将看到一个类似的窗口。

几乎linux所有的GUI库都基于X视窗系统中;

在X视窗系统中,X工具包就是一个GUI库,通过函数调用就可以创建按钮菜单等构模山件,历史上有过很多流行的工具包,比如Motif,OprnLook和Xt,但是他们大部分都已经被GTK+和Qt取代,这两者分别构成了GNOME和KDE桌面的基础。

此外,你还可以选择旦拆中与平台无关的窗口API,如Java使用的Swing和以前的AWT;C#的mono项目;方便快捷的Tcl/Tk脚本语言;Python以及Perl;

Linux下如何退出图形界面

Linux下退出图形界面的方法如下纳耐:
1、在窗口 地址栏里输入cmd,按回车键打开一个终端;
2、输入命令init3,按回车;
3、再输入命令init5,按回车键;
4、图形界面会推到选择用户登录界面,该界面上有restart和shutdown选择,选择shutdown,系统就会关闭图形界面服务,进拍茄敏入命令行界面即可。袭枝

关于本次linux图形界面编程和linux 图形界面 c语言的问题分享到这里就结束了,如果解决了您的问题,我们非常高兴。

linux图形界面编程(linux 图形界面 c语言)

本文编辑:admin

更多文章:


dul是什么意思(nsk轴承dul和sul的区别)

dul是什么意思(nsk轴承dul和sul的区别)

其实dul是什么意思的问题并不复杂,但是又很多的朋友都不太了解nsk轴承dul和sul的区别,因此呢,今天小编就来为大家分享dul是什么意思的一些知识,希望可以帮助到大家,下面我们一起来看看这个问题的分析吧!本文目录nsk轴承dul和sul

2026年5月15日 15:30

中国移动个人主页(中国移动我的页面在哪打开)

中国移动个人主页(中国移动我的页面在哪打开)

本篇文章给大家谈谈中国移动个人主页,以及中国移动我的页面在哪打开对应的知识点,文章可能有点长,但是希望大家可以阅读完,增长自己的知识,最重要的是希望对各位有所帮助,可以解决了您的问题,不要忘了收藏本站喔。本文目录中国移动我的页面在哪打开中国

2026年1月3日 16:15

grocery联想记忆(grocery怎么拆分记忆)

grocery联想记忆(grocery怎么拆分记忆)

本篇文章给大家谈谈grocery联想记忆,以及grocery怎么拆分记忆对应的知识点,文章可能有点长,但是希望大家可以阅读完,增长自己的知识,最重要的是希望对各位有所帮助,可以解决了您的问题,不要忘了收藏本站喔。本文目录grocery怎么拆

2025年8月26日 06:00

gridview排序功能属性(怎么把datagridview中的自动排序功能禁用)

gridview排序功能属性(怎么把datagridview中的自动排序功能禁用)

大家好,如果您还对gridview排序功能属性不太了解,没有关系,今天就由本站为大家分享gridview排序功能属性的知识,包括怎么把datagridview中的自动排序功能禁用的问题都会给大家分析到,还望可以解决大家的问题,下面我们就开始

2025年6月15日 08:45

易语言主程序和dll通讯(C+的dll如何用易语言正确调用)

易语言主程序和dll通讯(C+的dll如何用易语言正确调用)

今天给各位分享C+的dll如何用易语言正确调用的知识,其中也会对C+的dll如何用易语言正确调用进行解释,如果能碰巧解决你现在面临的问题,别忘了关注本站,现在开始吧!本文目录C+的dll如何用易语言正确调用易语言如何调用dll文件易语言如何

2026年4月8日 14:30

strut是什么车(这是什么品牌的车标)

strut是什么车(这是什么品牌的车标)

大家好,strut是什么车相信很多的网友都不是很明白,包括这是什么品牌的车标也是一样,不过没有关系,接下来就来为大家分享关于strut是什么车和这是什么品牌的车标的一些知识点,大家可以关注收藏,免得下次来找不到哦,下面我们开始吧!本文目录这

2026年8月3日 11:15

前端如何判断(如何判断一个前端人员的逻辑性)

前端如何判断(如何判断一个前端人员的逻辑性)

今天给各位分享如何判断一个前端人员的逻辑性的知识,其中也会对如何判断一个前端人员的逻辑性进行解释,如果能碰巧解决你现在面临的问题,别忘了关注本站,现在开始吧!本文目录如何判断一个前端人员的逻辑性前端如何判断当天是否签到怎样快速判断一个前端工

2026年9月24日 21:30

怎么制作网站ping工具(ping是什么 如何ping一个站点)

怎么制作网站ping工具(ping是什么 如何ping一个站点)

大家好,如果您还对怎么制作网站ping工具不太了解,没有关系,今天就由本站为大家分享怎么制作网站ping工具的知识,包括ping是什么 如何ping一个站点的问题都会给大家分析到,还望可以解决大家的问题,下面我们就开始吧!本文目录ping是

2026年4月7日 09:15

前端样式网站(前端开发应该知道的几个CSS网页表单布局技巧)

前端样式网站(前端开发应该知道的几个CSS网页表单布局技巧)

今天给各位分享前端开发应该知道的几个CSS网页表单布局技巧的知识,其中也会对前端开发应该知道的几个CSS网页表单布局技巧进行解释,如果能碰巧解决你现在面临的问题,别忘了关注本站,现在开始吧!本文目录前端开发应该知道的几个CSS网页表单布局技

2026年2月10日 21:15

网址的url(网站URL:是什么)

网址的url(网站URL:是什么)

大家好,关于网址的url很多朋友都还不太明白,不过没关系,因为今天小编就来为大家分享关于网站URL:是什么的知识点,相信应该可以解决大家的一些困惑和问题,如果碰巧可以解决您的问题,还望关注下本站哦,希望对各位有所帮助!本文目录网站URL:是

2026年4月24日 04:30

flash模板照片幻灯片放映按钮代码解释?如何使用C#操作幻灯片

flash模板照片幻灯片放映按钮代码解释?如何使用C#操作幻灯片

大家好,如果您还对幻灯片代码不太了解,没有关系,今天就由本站为大家分享幻灯片代码的知识,包括flash模板照片幻灯片放映按钮代码解释的问题都会给大家分析到,还望可以解决大家的问题,下面我们就开始吧!本文目录flash模板照片幻灯片放映按钮代

2025年7月24日 18:45

alarm和clock的区别(clock是什么意思英语)

alarm和clock的区别(clock是什么意思英语)

其实alarm和clock的区别的问题并不复杂,但是又很多的朋友都不太了解clock是什么意思英语,因此呢,今天小编就来为大家分享alarm和clock的区别的一些知识,希望可以帮助到大家,下面我们一起来看看这个问题的分析吧!本文目录clo

2025年10月20日 22:00

delphi bit定义(delphi中如何定义TBitmap类型的变量)

delphi bit定义(delphi中如何定义TBitmap类型的变量)

各位老铁们,大家好,今天由我来为大家分享delphi bit定义,以及delphi中如何定义TBitmap类型的变量的相关问题知识,希望对大家有所帮助。如果可以帮助到大家,还望关注收藏下本站,您的支持是我们最大的动力,谢谢大家了哈,下面我们

2025年11月14日 19:00

bankstatement中文(bank statement是什么意思)

bankstatement中文(bank statement是什么意思)

“bankstatement中文”相关信息最新大全有哪些,这是大家都非常关心的,接下来就一起看看bankstatement中文(bank statement是什么意思)!本文目录bank statement是什么意思签证所需要的bank s

2026年4月5日 01:45

linux如何编程(linux编程开发如何实现对智能手机的开发)

linux如何编程(linux编程开发如何实现对智能手机的开发)

“linux如何编程”相关信息最新大全有哪些,这是大家都非常关心的,接下来就一起看看linux如何编程(linux编程开发如何实现对智能手机的开发)!本文目录linux编程开发如何实现对智能手机的开发如何通过mac os系统学习linux系

2025年12月23日 13:00

compareto方法实现(java中compareto实现学生成绩排列)

compareto方法实现(java中compareto实现学生成绩排列)

大家好,今天小编来为大家解答以下的问题,关于compareto方法实现,java中compareto实现学生成绩排列这个很多人还不知道,现在让我们一起来看看吧!本文目录java中compareto实现学生成绩排列代码中是怎么调用compar

2026年4月28日 01:00

filterout(filter怎么记忆)

filterout(filter怎么记忆)

其实filterout的问题并不复杂,但是又很多的朋友都不太了解filter怎么记忆,因此呢,今天小编就来为大家分享filterout的一些知识,希望可以帮助到大家,下面我们一起来看看这个问题的分析吧!本文目录filter怎么记忆filte

2026年3月30日 06:00

lodop插件怎么下载(clodop下载失败怎么回事)

lodop插件怎么下载(clodop下载失败怎么回事)

各位老铁们,大家好,今天由我来为大家分享lodop插件怎么下载,以及clodop下载失败怎么回事的相关问题知识,希望对大家有所帮助。如果可以帮助到大家,还望关注收藏下本站,您的支持是我们最大的动力,谢谢大家了哈,下面我们开始吧!本文目录cl

2026年3月11日 18:00

pgc中国参赛队伍(pnc全明星赛赛程)

pgc中国参赛队伍(pnc全明星赛赛程)

其实pgc中国参赛队伍的问题并不复杂,但是又很多的朋友都不太了解pnc全明星赛赛程,因此呢,今天小编就来为大家分享pgc中国参赛队伍的一些知识,希望可以帮助到大家,下面我们一起来看看这个问题的分析吧!本文目录pnc全明星赛赛程PGC第三周周

2026年2月17日 03:45

win8如何重装系统(怎么重新安装win8系统|win8如何重新安装系统)

win8如何重装系统(怎么重新安装win8系统|win8如何重新安装系统)

大家好,win8如何重装系统相信很多的网友都不是很明白,包括怎么重新安装win8系统|win8如何重新安装系统也是一样,不过没有关系,接下来就来为大家分享关于win8如何重装系统和怎么重新安装win8系统|win8如何重新安装系统的一些知识

2026年5月29日 06:45

近期文章

本站热文

electronics软件(labcenter electronics是什么软件)
2025-05-22 23:45:02 浏览:134
博客是微博吗(博客是微博吗)
2025-05-22 22:45:01 浏览:111
diversity and distribution(悬赏英语短文)
2025-05-23 16:15:02 浏览:107
ios软件开发前景(iOS就业前景怎么样)
2025-05-22 23:00:01 浏览:102
next month(有The next month这个单词吗,和 next month有什么区别)
2025-05-23 02:30:01 浏览:102
patron(patron是什么意思)
2025-05-23 10:30:02 浏览:95
标签列表

热门搜索