c - 如何在 C 语言中更新 GTK+-3.0 中的标签

标签 c gtk label

我似乎无法使用该功能

gtk_label_set_text();

这是我写的:

#include <gtk/gtk.h>

int main(int argc, char *argv[] )
{
  gtk_init(&argc, &argv);

  GtkWidget *label;

  //label
  label = gtk_label_new("This is my label");

  gtk_label_set_text(label, "I cannot use this func");

  if(GTK_IS_LABEL(label)){
    g_print("IT IS A LABEL\n");
  }else if (GTK_IS_WIDGET(label)){
    g_print("well at least its a Widget\n");
  }else {
    g_print("why is it not a label?! T_T\n");
  }

  gtk_main();
  return 0;
}

它说

passing argument 1 of ‘gtk_label_set_text’ from incompatible pointer type
expected ‘struct GtkLabel *’ but argument is of type ‘struct GtkWidget *’

当我尝试编译它时。好的。我把它改为

GtkLabel *label;

但是它不允许我使用 gtk_label_new();因为编译器提示

assignment from incompatible pointer type

然后我放弃并注释//gtk_label_set_text 来询问程序 GTK_IS_LABEL(label);它打印出“IT IS A LABEL”。 我现在真的放弃了,请问亲爱的 Stack Overflow 社区。

最佳答案

由于它是 C 代码,因此您已应用“转换”指针,因为 gtk_label_new 返回“基类”或结构:

╰── GtkWidget
    ╰── GtkMisc
        ╰── GtkLabel
            ╰── GtkAccelLabel

转换是通过宏完成的(参见here) 代码:

GtkWidget *label;

//label
label = gtk_label_new("This is my label");

gtk_label_set_text(GTK_LABEL (label), "I cannot use this func");

注意:在 C++ 中,由于 GtkLabel 结构继承自 GtkWidget,因此不需要强制转换,您可以直接将标签存储在 GtkLabel 中,但是有C 中没有继承这样的东西。

关于c - 如何在 C 语言中更新 GTK+-3.0 中的标签,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39155120/

相关文章:

java - 为什么我应该避免使用 Java 标签语句?

python - 更新另一个类中的 kivy 标签文本

C 套接字范围 header 无效

c - 强制子部件尊重父部件绘图区域(如圆角)

c++ - (GTK :4783): Gtk-CRITICAL **: gtk_image_set_from_pixbuf: assertion 'GTK_IS_IMAGE (image)' failed

linux - 如何为 Gnome 和 Gtk 配​​置 GSettings

c - 扫描 char 并将 Switch 语句与 If 语句组合?开关(时间)

c - 有没有办法确定是否有任何线程正在等待给定的条件变量?

c - 我的功能不工作 'name.exe has stopped working'

c# - 向菜单条添加标签