我似乎无法使用该功能
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 社区。p>
最佳答案
由于它是 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/