vbox图形界面_嵌入式设备GUI开发:GTK+图形界面库(进阶)

一、带有按钮的窗口

开发流程:

看自己的需求

画出自己的设计图

写中文流程

按照中文流程写代码

一点点保存、编译运行看结果、调试

包含头文件include

写主函数main

环境初始化gtk_init

创建窗口gtk_window_new

设置窗口属性

创建一个按钮

将按钮放入到窗口中

显示窗口上面的所有内容gtk_widget_show_all

主事件循环gtk_main

return 0;

我们需要的新的函数声明为:

创建一个带内容的按钮

GtkWidget *gtk_button_new_with_label(const gchar *label );

获得按钮上面的文本内容

const gchar *gtk_button_get_label(GtkButton *button );

把控件添加到窗口容器里

void gtk_container_add(GtkContainer*container,GtkWidget*widget);

container:容纳控件的容器;widget:要添加的控件

代码:

#include //gtk的头文件#include int main(int argc, char *argv[])//main函数需要去掉const{

//环境初始化gtk_init(&argc,&argv);

//创建窗口GtkWidget* window = gtk_window_new(GTK_WINDOW_TOPLEVEL);

//创建按钮GtkWidget* button = gtk_button_new_with_label("请戳我");

//将按钮放入窗口gtk_container_add(GTK_CONTAINER(window),button);

gtk_widget_show_all(window);

//信号连接g_signal_connect(window,"destroy",G_CALLBACK(gtk_main_quit),NULL);

gtk_main();

return 0;

}

效果

如果我希望按钮按下的时候会有一些功能

我们需要使用信号连接

二、信号连接的正常使用

g_signal_connect(谁发出的信号,发出了什么信号,调用的回调函数,给回调函数的参数);

当前我们的按钮可以触发的信号:

窗口关闭时触发的常用信号:destroy, delete-event

操作按钮触发的常用信号:clicked, pressed,released

g_signal_connect(button,"pressed",G_CALLBACK(hahaha),"疼");

void hahaha(GtkButton*button, gpointer user_data);

开发流程:

1.写界面代码

2.写界面中的信号连接:当xxxx触发xx信号的时候你就会调用xxxxxx函数实现xxxxx功能

3.你会发现你的信号连接对应的回调函数不存在,因此需要定义这个回调函数

4.你会发现你的my_haha函数未声明,因为你调用的位置在定义的位置之上

因此向前声明一下这个函数(复制函数第一行,粘贴到最上方并且加;)

代码:

#include //gtk的头文件#include void my_haha(GtkButton* button,gpointer user_data);//向前声明

int main(int argc, char *argv[])//main函数需要去掉const{

//环境初始化gtk_init(&argc,&argv);

//创建窗口GtkWidget* window = gtk_window_new(GTK_WINDOW_TOPLEVEL);

//创建按钮GtkWidget* button1 = gtk_button_new_with_label("请戳我");

//将按钮放入窗口gtk_container_add(GTK_CONTAINER(window),button1);

gtk_widget_show_all(window);

//信号连接g_signal_connect(window,"destroy",G_CALLBACK(gtk_main_quit),NULL);

g_signal_connect(button1,"pressed",G_CALLBACK(my_haha),"疼");

gtk_main();

return 0;

}

void my_haha(GtkButton* button,gpointer user_data)

{

//1我们可以打印按钮上面的内容(先获取按钮上的内容,然后打印,或者直接获取打印)const char * haha = gtk_button_get_label(button);

printf("%s\n", haha);//调用之后接返回值让后打印返回值printf("%s\n", gtk_button_get_label(button));//直接打印返回值//2我们可以打印传递过来的参数---疼printf("%s\n", (char *)user_data);//本身是gpointer类型,但是我们打印%是,所以强转}

如果我们向窗口中放入多个按钮

有的小伙伴说,我复制粘贴就可以了

以上就是我们报的错误,为什么呢?因此窗口属于只能容纳一个控件的容器控件

控件:界面上可见的东西

容器控件:能容纳控件的控件

只能容纳一个控件的容器控件:窗口、按钮(按钮上什么都没有、就有文本、有图片)

能容纳多个控件的容器控件:布局(你可以看查画板)

非容器控件:label、entry

三、布局:

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值