前言
一开始想从xlib开始学起,但是他api不太好用,所以只能在到上一层的封装,比如使用gtk这些库了,而在这个过程中,对Java GUI程序理解又深了一步,我们知道Java是可移植的,对于他的GUI在不同操作系统的实现,还是很复杂的,Java在Linux下的实现直接是使用xlib库,而对于高度抽象出Button、Image这些组件,还有布局管理器等这些,直接使用xlib还是有难度的,xlib也不提供这些,只提供窗口如何创建、怎么绘制,图像怎么摆放是上层的事情了。
而在Linux下工作,所以想学学GUI程序,起源是安装软件后,每次都要手动编辑desktop文件,放入~.local/share/applications/,比较麻烦,而java编写又需要安装java环境,比较麻烦,毕竟,想发布出去。
界面设计
但是,纯手编写所有代码还是很麻烦,无意间发现一个glade这个工具,他类似于VB的界面设计,只需要把控件托放到指定位置即可,他会生成一个窗口文件,是一个xml的格式,而gtk通过gtk_builder_add_from_file这个函数可以把xml文件解析成窗口,这样我们只专注逻辑的编写,十分方便。
下面是在manjaro下的安装方法
pamac install glade
下图是托放排列好的布局。
下面是窗口创建过程
int main(int argc, char **argv) {
GtkBuilder *builder = NULL;
gtk_init(&argc, &argv);
builder = gtk_builder_new();
if (gtk_builder_add_from_file(builder, "gtk.glade", NULL) == 0) {
printf("gtk_builder_add_from_file FAILED\n");
return 0;
}
window = GTK_WIDGET(gtk_builder_get_object(builder, "window1"));
execPathTextView = GTK_WIDGET(gtk_builder_get_object(builder, "text_view_exec_path"));
desktopNameTextView = GTK_WIDGET(gtk_builder_get_object(builder, "text_view_desktop_name"));
iconPathTextView = GTK_WIDGET(gtk_builder_get_object(builder, "text_view_icon_path"));
applicationNameTextView = GTK_WIDGET(gtk_builder_get_object(builder, "text_view_application_name"));
gtk_builder_connect_signals(builder, NULL);
gtk_widget_show_all(window);
gtk_main();
return 0;
}
完整代码如下:
https://github.com/houxinlin/linux-desktop-builder