当使用C++在gtk +中编程时,是否有任何理由使用特殊绑定?作为在C++是C的超集,为什么不能与呼叫使用回事件以及C风格的GTK +对象的静态成员类中的一类封装成这样:混合gtk +和C++
class MainWindow{
public:
MainWindow(void);
GtkWidget* window;
GtkWidget* button;
static void signals(GtkWidget *widget, GdkEventButton *event, gpointer callback_data);
static gboolean onDelete(GtkWidget *widget, GdkEvent *event, gpointer data);
static void onDestroy(GtkWidget *widget, gpointer data);
/* GtkWidget* canvas;
GtkWidget* items; */
};
和信号连接完成在施工:
MainWindow::MainWindow(){
// Create widgets
window = gtk_window_new(GTK_WINDOW_TOPLEVEL);
button = gtk_button_new_with_label("Push the button.");
// Connect widget signals
g_signal_connect(G_OBJECT(button), "button_press_event", G_CALLBACK(signals), NULL);
// Add widgets to main window (pack multiple widgets)
gtk_container_add(GTK_CONTAINER(window), button);
// Show window
gtk_widget_show_all(window);
// Connect Main Window Signals
g_signal_connect(G_OBJECT(window), "delete_event", G_CALLBACK(onDelete), NULL);
g_signal_connect(G_OBJECT(window), "destroy", G_CALLBACK(onDestroy), NULL);
}
然后,只需创建设立GTK +来电之后在主类:
int main(int argc, char* argv[])
{
// initialize GTK
gtk_init(&argc, &argv);
gdk_rgb_init();
// Create Main Window...
MainWindow win;
// Listen
gtk_main();
return 0;
}
构造函数可以获取初始大小和位置以及其他选项的参数...
我是否让这个过于简单或者是我读过的所有其他东西使它太难了?
当然你可以使用C绑定。像gtkmm这样的C++绑定的重点在于它们可能更好地集成到C++程序中。 – us2012 2013-02-10 19:34:48
您必须更多地观察对象的生命周期以避免内存泄漏,并且类型安全性较低,因此需要更多的运行时错误。还有更多的样板,所以代码的可读性会降低。但从技术上讲,它可以正常工作,但我永远不会推荐它。 – ergosys 2013-02-10 20:15:37