【问题标题】:Gtk+: print a float value to an entry widgetGtk+:将浮点值打印到条目小部件
【发布时间】:2017-03-07 15:32:42
【问题描述】:

我非常想将浮点值打印到条目小部件。 原则上,我想在入口小部件处给出比例小部件设置的值。 我将此功能打包到一个回调函数中,当缩放小部件的值更改时调用该回调函数。

    static void scale_callback(GtkWidget *widget, para* para)
    {
        char text;

        para->value=gtk_range_get_value(GTK_RANGE(widget));
        text=para->value;
        printf("%c\n",text);
        gtk_entry_set_text(GTK_ENTRY(para->entry),&text);
    }

para 是一个结构,它保存指向条目小部件、缩放小部件和缩放小部件设置的值(浮点数)的指针。

    struct para
     {
        GtkWidget *scale;
        GtkWidget *entry;
        float value;
     };

我现在的问题是只打印了一些随机的标志(e@A),而不是正确的值。我很确定在将浮点值转换为 gtk_entry_set_text 函数所需的 char 指针时会发生错误,但我不知道该怎么做。 欢迎提出任何建议(:

已解决: 感谢“一些程序员老兄”对 snprintf 的提示,它只需将缓冲区传递给 gtk_entry_set_text();

【问题讨论】:

  • 什么是para->value?是单个字符吗?也许您想要一个 string(即char 的 array)而不是单个字符? (当然使用snprintf 将“打印”到字符串中)
  • para 是一个结构,它保存指向条目和缩放小部件的指针以及一个浮点变量(值)。我想要的只是在条目小部件上给出一个浮点值
  • 编译器没有警告您将浮点值分配给char 变量?这应该给你first提示有问题。第二个问题是字符串是以零结尾的字符数组,而您的变量 text 不是。
  • 没有警告编译的程序,但是当我更改比例小部件的值时,在入口小部件上会打印一些随机符号
  • text=para->value; printf("%c\n",text); --> printf("%e\n",para->value);

标签: c pointers callback gtk type-conversion


【解决方案1】:

使用g_strdup_printf 代替 snprintf。使用 snprintf,您需要知道结果字符串的大小,或者需要使用过大的缓冲区来确保您将获得所有输入,或者将您的文本截断。

g_strdup_printf 准确分配存储信息所需的内存。只需使用结果,然后使用g_free 释放它。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2012-03-18
    • 1970-01-01
    • 1970-01-01
    • 2019-05-08
    • 1970-01-01
    • 2019-10-14
    • 1970-01-01
    相关资源
    最近更新 更多