繁体   English   中英

混合gtk +和c ++

[英]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;
      }

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

我是不是太简单了?或者我读过的所有其他东西太难了吗?

您可以这样做。

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

它称为gtkmm

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM