1

在 gtk+ 中使用 c++ 编程时,是否有任何理由使用特殊绑定?既然 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;
      }

构造函数可以接受初始大小和位置的参数以及其他选项......

是我把它弄得太简单了,还是我读过的所有其他东西都让它太难了?

4

2 回答 2

6

你可以这样做。

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

它被称为gtkmm

于 2013-02-10T19:33:45.440 回答
2

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

于 2018-10-11T10:50:19.560 回答