C++ 点击获取价值
我需要在单击文本时获取一个值,但由于某种原因,指针丢失并返回一个随机值,我想这样做:C++ 点击获取价值,c++,c,gtk,gtk3,C++,C,Gtk,Gtk3,我需要在单击文本时获取一个值,但由于某种原因,指针丢失并返回一个随机值,我想这样做: static void click(GtkWidget* widget, long* click){ cout << "Long value is: " << *click << endl; } int main(){ gtk_init(0,0); //......... MORE CODE ...... GtkWidget* lab
static void click(GtkWidget* widget, long* click){
cout << "Long value is: " << *click << endl;
}
int main(){
gtk_init(0,0);
//......... MORE CODE ......
GtkWidget* label = gtk_image_menu_item_new_with_label(text);
long value = 50509;
g_signal_connect(label, "button_press_event", G_CALLBACK(click), &value);
//......... MORE CODE ......
gtk_main();
}
静态无效单击(GtkWidget*小部件,长*单击){
cout我发现了错误,这是一个非常简单的错误,当我在函数中传递一个值时,g_signal_connect,它变成了一个gpointer,指针支持32位数据,而long消耗64位,我将long改为int,它工作得非常好!。
解决方案:
static void click(GtkWidget *widget,GdkEvent *event, gpointer data){
cout << "Int value is: " << GPOINTER_TO_INT(data) << endl;
}
int main(){
gtk_init(0,0);
//......... MORE CODE ......
GtkWidget* label = gtk_image_menu_item_new_with_label(text);
int value = 50509;
g_signal_connect(label, "button_press_event", G_CALLBACK(click), GINT_TO_POINTER(value));
//......... MORE CODE ......
gtk_main();
}
static void单击(GtkWidget*小部件、GdkEvent*事件、gpointer数据){
你从哪里得到的点击
的函数签名?检查传递了哪些参数。你实际上是在使用事件
参数为什么要传递一个整数作为指针?你仍然可以将它作为地址传递。你只需将gpointer
转换为long*
。或者使用(long*)数据< /代码>或C++等价物。@ Gerhardh,我也尝试过,但是我没有成功,它一直在打破真正的价值,我唯一的解决办法是用“int”。如果你使用<代码> GsiZeToPoTeIn()/<代码>和<代码> GPOTINTION tox siz()<代码>?