打印

使用glade3工具在STM32MP157C-DK2上界面开发

[复制链接]
259|0
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
年前申请了一块stm32mp157开发板,工作之余研究了一下。STM32MP1多核微处理器,带有650Mhz主频的cortex-A7双核以及一个主频为209Mhz的cortex-M4核。很适合需要上linux系统,同时又需要一些实时需求场合的项目。拿到开发板按官方wiki教程(https://wiki.st.com/stm32mpu)一步一步操作。烧录了openstlinux-4.19系统。系统启动后进入主界面。



图形界面是基于GTK+的,之前在Ubuntu上接触过。使用glade3工具很方便开发出一些小工具。于是想用glade3开发界面编译后在stm32mp157开发板上运行。试了下还真可以。我开发环境是ubuntu16.04

glade3使用教程自行百度下,也不难上手。工具界面如下:






代码编写完后下载到开发板子



代码如下:
#include <gtk/gtk.h>
#include <string.h>

//全局变量
GtkWidget *g_text_view;
GtkTextBuffer *g_buffer;
GtkTextIter *g_Iter;

//我们在UI中,为button1添加的点击函数
static void button1_clicked_cb(GObject *object, gpointer user_data)
{
        const gchar *text = "How are you!";
        GtkTextIter start,end;

        gtk_text_buffer_get_bounds(GTK_TEXT_BUFFER(g_buffer), &start,&end);        /*获得缓冲区开始和结束位置的Iter*/
        gtk_text_buffer_insert(GTK_TEXT_BUFFER(g_buffer), &start, text, strlen(text));        /*插入文本到缓冲区*/
        // g_print(user_data);
        // g_print("\n");
}

//我们在UI中,为button1添加的点击函数
static void button2_clicked_cb(GObject *object, gpointer user_data)
{
        g_print(user_data);
        g_print("\n");
}

// static void gtk_main_quit(GObject *object, gpointer user_data)
// {

// }

int main(int argc, char *argv[])
{
        GObject *button1, *button2;  
        GtkBuilder *builder;
        GtkWidget *window;
        // GtkWidget *textView1;        
        // GtkTextBuffer *buffer;

        //1.gtk初始化                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                       
        gtk_init(&argc,&argv);

        //2.创建GtkBuilder对象,GtkBuilder在<gtk/gtk.h>声明
        builder = gtk_builder_new();

        //3.读取test.glade文件的信息,保存在builder中
        if ( !gtk_builder_add_from_file(builder,"test1.glade", NULL)) {
                printf("connot load file!");
        }

        //4.获取窗体指针,注意"window1"要和glade里面的标签名词匹配
        window = GTK_WIDGET(gtk_builder_get_object(builder,"window1"));
        button1 = gtk_builder_get_object(builder, "btn1");
        button2 = gtk_builder_get_object(builder, "btn2");
        g_text_view = GTK_WIDGET(gtk_builder_get_object(builder, "textview1"));

        //测试TextView
        g_buffer = gtk_text_view_get_buffer(GTK_TEXT_VIEW(g_text_view)); /*获得文本框缓冲区*/

        //手动连接信号
        // g_signal_connect(GTK_OBJECT(window),”destroy”,G_CALLBACK(gtk_main_quit),NULL);
        g_signal_connect(button1, "clicked", G_CALLBACK(button1_clicked_cb), "press button1");
        g_signal_connect(button2, "clicked", G_CALLBACK(button2_clicked_cb), "press button2");
        // gtk_builder_connect_signals (builder, NULL);//连接响应事件

        g_object_unref(G_OBJECT(builder));  //释放xml内存空间

        gtk_widget_show_all(window);

        gtk_main();

        return 0;
}

测试程序实现的功能比较简单,两个按键和一个文本框。key1触发文本框显示一次 How are you!。key2在终端显示press button2。
完整工程在附近中。

使用特权

评论回复

相关帖子

发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

437

主题

437

帖子

0

粉丝