linux嵌入式应用开发- ubuntu eclipse/C gtk用户界面编程

本文详细介绍了在Ubuntu环境下通过Eclipse使用CGTK进行GTK编程的全过程,包括安装环境、编写代码及设置Eclipse环境等步骤。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >


环境:ubuntu, eclipse ,c gtk

linux 环境下编程主要有两种方式:GTK  和QT


1,安装gtk 环境


sudo apt-get install build-essential 	
sudo apt-get install gnome-core-devel
sudo apt-get install pkg-config 
sudo apt-get install devhelp 
sudo apt-get install libglib2.0-doc libgtk2.0-doc

2,编写代码

#include 
 
  
/*定义回调函数hello,点击按钮时被系统自动调用*/
void main_btn_clicked(GtkWidget *widget,gpointer *data)
{
g_print("button clicked and data = %s\n",(char *)data);
voice_start(0);
}


/*定义回调函数destroy,关闭窗口时被系统自动调用*/
void main_destroy(GtkWidget *widget,gpointer *data)
{
gtk_main_quit();
}


int main_init_GUI(int value,char* argv[])
{
/*定义指向控件的指针*/
GtkWidget *window;
GtkWidget *fixed_container;
GtkWidget *complete_btn;
GtkWidget *scroll_bar;
GtkWidget *text_view;

GtkTextIter	text_iter;


/*初始化图形显示环境*/
gtk_init(&value,&argv);


/*创建窗口,并设置当关闭窗口时,要执行的回调函数*/
window = gtk_window_new(GTK_WINDOW_TOPLEVEL);
g_signal_connect(GTK_OBJECT(window),"destroy",
GTK_SIGNAL_FUNC(main_destroy),NULL);
gtk_container_border_width(GTK_CONTAINER(window),0);/*设置窗口的属性*/
gtk_window_set_title(GTK_WINDOW(window),"demo");
gtk_widget_set_size_request(window,800,480);//set window size
gtk_window_set_position(GTK_WINDOW(window),GTK_WIN_POS_CENTER);//set window  position



/*create box container*/
fixed_container=gtk_fixed_new();//gtk_vbox_new(FALSE,0);
gtk_widget_set_usize(fixed_container,800,480);//set window size

/*创建按钮,并设置当点击按钮时,要执行的回调函数*/
complete_btn = gtk_button_new_with_label("complete");
g_signal_connect(GTK_OBJECT(complete_btn),"clicked",
GTK_SIGNAL_FUNC(main_btn_clicked),"complete_btn");
gtk_widget_set_size_request(complete_btn,180,80);//set window size
gtk_fixed_put(GTK_FIXED(fixed_container),complete_btn,280,360);


scroll_bar=gtk_scrolled_window_new(NULL,NULL);
gtk_scrolled_window_set_policy(GTK_SCROLLED_WINDOW(scroll_bar),GTK_POLICY_AUTOMATIC,GTK_POLICY_ALWAYS);
gtk_widget_set_size_request(scroll_bar,600,280);//set window size
gtk_fixed_put(GTK_FIXED(fixed_container),scroll_bar,100,50);
gtk_widget_show(scroll_bar);

/*创建text view*/
text_view = gtk_text_view_new();
gtk_scrolled_window_add_with_viewport(GTK_SCROLLED_WINDOW(scroll_bar),text_view);
//gtk_container_add(GTK_CONTAINER(scroll_bar),text_view);

text_buffer=gtk_text_view_get_buffer(GTK_TEXT_VIEW(text_view));
gtk_text_buffer_get_iter_at_offset(text_buffer,&text_iter,0);
gtk_text_buffer_insert(text_buffer,&text_iter,"",-1);

gtk_container_add(GTK_CONTAINER(window),fixed_container);

voice_init_engine(&callback_result,&callback_status);/*regeist the callback*/

gtk_widget_show_all(window);

/*进入消息处理循环*/
gtk_main();
return 0;
}
 

3,设置eclipse 环境

a, properties ->c/c++build/->setting->gcc c compiler->include

include path(-i) 添加   /usr/include/gtk-2.0      /usr/include/glib-2.0



b, properties ->c/c++build/->setting->gcc c compiler->miscellaneous 

Other flags 中添加  ·pkg-config --cflags gtk+-2.0·



c, properties ->c/c++build/->setting->GCC clinker ->miscellaneous

linker flags 后面添加 ·pkg-config --libs gtk+-2.0·




版权所有:http://blog.youkuaiyun.com/sea918


root@4a39b502e13d:/nvmp_source_dir/sdk/soc/ssc30x/mpp/ssc308/interface# make gcc -v Using built-in specs. COLLECT_GCC=gcc COLLECT_LTO_WRAPPER=/usr/lib/gcc/x86_64-linux-gnu/5/lto-wrapper Target: x86_64-linux-gnu Configured with: ../src/configure -v --with-pkgversion='Ubuntu 5.4.0-6ubuntu1~16.04.12' --with-bugurl=file:///usr/share/doc/gcc-5/README.Bugs --enable-languages=c,ada,c++,java,go,d,fortran,objc,obj-c++ --prefix=/usr --program-suffix=-5 --enable-shared --enable-linker-build-id --libexecdir=/usr/lib --without-included-gettext --enable-threads=posix --libdir=/usr/lib --enable-nls --with-sysroot=/ --enable-clocale=gnu --enable-libstdcxx-debug --enable-libstdcxx-time=yes --with-default-libstdcxx-abi=new --enable-gnu-unique-object --disable-vtable-verify --enable-libmpx --enable-plugin --with-system-zlib --disable-browser-plugin --enable-java-awt=gtk --enable-gtk-cairo --with-java-home=/usr/lib/jvm/java-1.5.0-gcj-5-amd64/jre --enable-java-home --with-jvm-root-dir=/usr/lib/jvm/java-1.5.0-gcj-5-amd64 --with-jvm-jar-dir=/usr/lib/jvm-exports/java-1.5.0-gcj-5-amd64 --with-arch-directory=amd64 --with-ecj-jar=/usr/share/java/eclipse-ecj.jar --enable-objc-gc --enable-multiarch --disable-werror --with-arch-32=i686 --with-abi=m64 --with-multilib-list=m32,m64,mx32 --enable-multilib --with-tune=generic --enable-checking=release --build=x86_64-linux-gnu --host=x86_64-linux-gnu --target=x86_64-linux-gnu Thread model: posix gcc version 5.4.0 20160609 (Ubuntu 5.4.0-6ubuntu1~16.04.12) make -C /nvmp_source_dir/sdk/soc/ssc30x/linux-5.10.117 M=/nvmp_source_dir/sdk/soc/ssc30x/mpp/ssc308/interface modules make[1]: Entering directory '/nvmp_source_dir/sdk/soc/ssc30x/linux-5.10.117' make[2]: Entering directory '/nvmp_source_dir/sdk/soc/ssc30x/linux-5.10.117' CC [M] /nvmp_source_dir/sdk/soc/ssc30x/mpp/ssc308/interface/tp_rc.o cc1: error: plugin support is disabled; configure with --enable-plugin cc1: error: plugin support is disabled; configure with --enable-plugin cc1: error: plugin support is disabled; configure with --enable-plugin cc1: error: unrecognized command line option '-Wno-typedef-redefinition' [-Werror] cc1: all warnings being treated as errors scripts/Makefile.build:273: recipe for target '/nvmp_source_dir/sdk/soc/ssc30x/mpp/ssc308/interface/tp_rc.o' failed make[3]: *** [/nvmp_source_dir/sdk/soc/ssc30x/mpp/ssc308/interface/tp_rc.o] Error 1 Makefile:2030: recipe for target '/nvmp_source_dir/sdk/soc/ssc30x/mpp/ssc308/interface' failed make[2]: *** [/nvmp_source_dir/sdk/soc/ssc30x/mpp/ssc308/interface] Error 2 make[2]: Leaving directory '/nvmp_source_dir/sdk/soc/ssc30x/linux-5.10.117' makefile:22: recipe for target 'modules' failed make[1]: *** [modules] Error 2 make[1]: Leaving directory '/nvmp_source_dir/sdk/soc/ssc30x/linux-5.10.117' Makefile:27: recipe for target 'all' failed make: *** [all] Error 2 gcc -v显示--enable-plugin,为什么还会报错呢?
最新发布
03-13
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值