Mixing gtk+ and c++

Mixing gtk+ and c++

本文关键字:c++ and gtk+ Mixing      更新时间:2023-10-16

使用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;
      }

构造函数可以获取初始大小和位置的参数,以及其他选项。。。

是我让这件事变得太容易了,还是我读过的所有其他东西都让它变得太难了?

你可以这么做。

如果您喜欢C++接口,GTK也已经提供了一个C++包装器。

它被称为gtkmm。

你当然可以做到。但是,由于许多预定义的类,使用gtkmm编程增加了更多面向对象的环境,这将减少无用的代码。