zoukankan      html  css  js  c++  java
  • TPM 程序设计基础 3-2 :GTK3 窗口与控件

    前言

    本文来简单讲 GTK3 中窗口简述,具体控件的声明、使用,当然,这里说的控件,都是课设中要使用的。

    窗口简述

    补充:销毁窗口

    窗口销毁函数
    gtk_widget_destroy( 窗口指针 );
    
    销毁信号回调自定义函数
    • 点击右上角的 X 关闭键,实际上是默认向 GTK3 库发送一个 "destroy" 信号,调用一个回调函数,关闭窗口。

    • 我们可以截断 "destroy" 这个信号,来回调自定义的回调函数。

      //连接信号,让点击右上角的 X 关闭按钮后,便调用 extra_pcr_win_destroy 函数
      g_signal_connect( 窗口指针 , "delete_event", G_CALLBACK( 回调函数名 ), 参数);
      

    控件序述

    在 GTK3 中如果要简单的使用控件,无外乎就几个步骤,这里以固定容器为例:

    • 声明控件的指针。

      GtkWidget *A;
      
    • 选择一个控件对应的函数,以控件的指针创建控件。

      A = gtk_XXXX_new_with_label(XXXX, XXXX);
      
    • 将创建的控件添加到窗口容器中。

      gtk_fixed_put(GTK_FIXED(fixed_box), button_pcr_get, 100, 50);

      gtk_fixed_put(GTK_FIXED(fixed_box), A, 100, 50);
      //fixed_box 是固定容器的指针
      //A 是控件的指针
      //100 是固定容器的 X 横坐标(左上角 x = 0)
      //50 是固定容器的 Y 纵坐标(左上角 y = 0)
      
    • 设置控件的高度、宽度等参数。

      gtk_widget_set_size_request(A, 50, 60);
      //A 是控件的指针
      //50 是控件宽度
      //60 是控件高度
      
    • 使用控件触发回调函数。(主要是按钮、菜单等控件)

      //连接信号,让点击按钮后,便调用 print_hello 函数
      g_signal_connect(A , "clicked" , G_CALLBACK( print_hello ) , NULL);
      
    • 使用函数调用控件的值等等。(主要是单/多行文本框等控件)

      • 见后文 文本框 控件。

    实例

    以基于固定容器的控件为例。

    • 这是一个最简单的 “button” 按钮控件的声明与使用过程。
    static void controller(GtkWidget *fixed_box)
    {
        //声明控件的指针
        GtkWidget *button_pcr_get;
        
        //选择一个 button 控件对应的函数,以控件的指针创建 按钮
        button_pcr_get = gtk_button_new_with_label("读取 PCR");
        
        //button 设置高度、宽度,并添加到固定容器布局
        gtk_fixed_put(GTK_FIXED(fixed_box), button_pcr_get, 100, 50);
        
        //设置 button 控件的高度、宽度
        gtk_widget_set_size_request(button_pcr_get, 100, 50);
        
        //连接信号,让点击按钮后,便调用 get_pcr_value 函数
        g_signal_connect(button_pcr_get , "clicked" , G_CALLBACK( get_pcr_value ) , NULL);
        ......
    }
    

    更多控件

    button 按钮控件

    • 例子,具体见实例:

      //声明控件的指针
      GtkWidget *button_pcr_get;
      
      //选择一个 button 控件对应的函数,以控件的指针创建 按钮
      button_pcr_get = gtk_button_new_with_label("读取 PCR");
      

    文本框 控件

    文本框 控件 添加到窗口容器 以及 设置控件的高度、宽度等参数 同 button 实例。

    单行文本框

    • 例子:

      //声明控件的指针
      GtkWidget *entry_pcr_extra_string);
      
      // 创建行编辑
      entry_pcr_extra_string = gtk_entry_new();  
      

    多行文本框

    • 例子:

      //声明 多行文本框 控件的指针
      GtkWidget *entry_pcr_read;
      
      //创建一个多行文本框
      entry_pcr_read = gtk_text_view_new();
      

    文本框 更多相关函数

    设置 文本框 显示最大字符长度

    •   //设置 文本框 编辑显示最大字符的长度为 40
        gtk_entry_set_max_length(GTK_ENTRY( 文本框指针 ), 40);
      

    设置 文本框 行编辑内的值

    •   //首次打开窗口是加载的值
        gtk_entry_set_text(GTK_ENTRY( 文本框指针 ), "123");
      

    使用函数调用控件的值

    •   //声明 const gchar * 字符串指针
        const gchar *entry_A_text;
        
        //将 文本框 中的字符串,赋予 const gchar * 字符串指针
        entry_A_text = gtk_entry_get_text(GTK_ENTRY( 文本框指针 ));
      

    字符串输出显示到 文本框 控件

    注意:这里的输出显示函数 单行 与 多行 不一样

    • 单行:

      gtk_entry_set_text(GTK_ENTRY( 单行文本框指针 ), "2+2=4");
      
    • 多行:

      //声明 GtkTextBuffer * 字符串缓冲区
      GtkTextBuffer *buffer;
      
      //为多行文本框控件分配缓冲区
      buffer = gtk_text_view_get_buffer(GTK_TEXT_VIEW( 多行文本框指针 ));
      
      //从头显示缓冲区字符
      gtk_text_buffer_set_text (buffer, "1234567890abcdef", -1);
      

    提示弹窗

    • 提示弹窗则更加特殊,创建函数的参数更多。

      相比于控件,其实更接近于创建一个新的窗口。

      例子:

      //声明 提示弹窗 的指针
      GtkWidget *dialog;
      
      //创建一个提示弹窗,"note info" 为提示弹窗的提示信息
      dialog = gtk_message_dialog_new(struct_pcr_extra.win_extra,
                      GTK_DIALOG_DESTROY_WITH_PARENT,
                      GTK_MESSAGE_INFO,
                      GTK_BUTTONS_OK,
                      dialog_title, "note info");
      
      //设置提示弹窗标题
      gtk_window_set_title(GTK_WINDOW(dialog), "title");
      
      //以指针运行 提示弹窗
      gtk_dialog_run(GTK_DIALOG(dialog));
      
      //点击确定关闭提示弹窗
      gtk_widget_destroy(dialog);
      
  • 相关阅读:
    docker容器中查看容器linux版本
    mac 安装docker
    音视频流处理
    激光雷达
    sick 激光
    Ubuntu 14.04 安装Docker
    W: GPG error: http://ppa.launchpad.net trusty InRelease: The following signatures couldn't be verified because the public key is not available: NO_PUBKEY 8CF63AD3F06FC659
    rtp发送 h265
    pytorch 环境搭建
    Linux 修改文件夹的用户组权限
  • 原文地址:https://www.cnblogs.com/Yogile/p/12811453.html
Copyright © 2011-2022 走看看