繁体   English   中英

C ++ gtk控制台日志功能错误?

[英]c++ gtk console log function is wrong?

优秀的程序员和软件工程师的Hello社区;)

我想做一个像日志功能一样的功能。

我有一个c ++ gtk GUI程序,每个击中的地方都应该记录在控制台上,因此,如果我单击“发送”,它应该将“发送”写入控制台。 这里的代码:

#include <gtk/gtk.h>

static void printc(const gchar* msg, GtkWidget *widget, gpointer data){
  g_print(msg);
}

int main(int argc, char *argv[]){
  GtkBuilder *builder;
  GObject *wnd;
  GObject *btn;

  gtk_init(&argc, &argv);

  builder = gtk_builder_new();
  gtk_builder_add_from_file(builder, "builder.ui", NULL);

  wnd = gtk_builder_get_object(builder, "wnd");
  g_signal_connect(wnd, "destroy", G_CALLBACK(gtk_main_quit), NULL);

  btn = gtk_builder_get_object(builder, "btn_send");
  g_signal_connect(btn, "clicked", G_CALLBACK(printc("send")), NULL);

  gtk_main();

  return 0;
}

错误:

main.cpp:22:60: error: too few arguments to function ‘void printc(const gchar*, GtkWidget*, gpointer)’

g_signal_connect(btn,“ clicked”,G_CALLBACK(printc(“ send”)),NULL);

我该如何解决我的问题?

问题是您试图调用printc()而不是将其作为回调的引用传递。 需要以与使用“销毁”信号相似的方式进行设置。 还要注意,信号及其回调将“用户数据”作为尾参数,您可以使用它传递自定义的按回调文本(如果您希望将文本作为第一个参数,也可以使用g_signal_connect_swapped())。 鉴于此,按如下所示设置回调:

static void printc (GtkWidget *widget, const gchar* msg) { ... }
...
g_signal_connect (btn, "clicked", G_CALLBACK(printc), (const gpointer)"send");

或与连接交换:

static void printc (const gchar* msg, GtkWidget *widget) { ... }
...
g_signal_connect_swapped (btn, "clicked", G_CALLBACK(printc), (const gpointer)"send");

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM