[英]Mixing gtk+ and c++
使用c ++在gtk +中编程时,是否有任何理由使用特殊绑定? 既然c ++是C的超集,为什么不能使用具有静态成员作为回调事件的类,而不能将c样式的gtk +对象封装在这样的类中:
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 +调用后在Main中创建类:
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;
}
构造函数可以采用初始大小和位置以及其他选项的参数...
我是不是太简单了?或者我读过的所有其他东西太难了吗?
您当然可以做到。 但是由于许多预定义的类,使用gtkmm进行编程增加了更多的面向对象的环境,这将减少无用的代码。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.