【发布时间】:2014-01-16 03:51:03
【问题描述】:
我一直在摸索为什么下面的代码会触发绘制回调三次而不是一次。
#include <iostream>
#include <gtk/gtk.h>
using namespace std;
void on_draw(){
cout << "drawing"<<endl;
}
int main( int argc, char *argv[])
{
GtkWidget *window;
GtkWidget *drgArea;
gtk_init(&argc, &argv);
window = gtk_window_new(GTK_WINDOW_TOPLEVEL);
drgArea = gtk_drawing_area_new();
// gtk_widget_set_redraw_on_allocate(drgArea, -1);
gtk_container_add(GTK_CONTAINER(window), drgArea);
gtk_widget_show_all(window);
g_signal_connect(drgArea, "expose-event",
G_CALLBACK(on_draw), NULL);
gtk_main();
return 0;
}
【问题讨论】:
-
我猜是gtk+-2.xx?在询问与具有较长版本历史且主要版本之间存在重大差异的库相关的问题时,您应该始终添加这一点。
-
我的电脑中有另一个 gtk+-3xx,当我切换代码使用它时,回调计数跳到 4!
-
在 gtk3 中您应该使用“draw”信号,如果您对此还有其他问题,请打开另一个问题。
-
不,我只是尝试了它,因为您对版本号持怀疑态度,所以我尝试了另一个,肯定是我使用了“draw”信号。
标签: c events gtk gtk2 drawingarea