【问题标题】:Duplicate GtkWidget in CC中的重复GtkWidget
【发布时间】:2011-04-29 15:36:00
【问题描述】:

我想复制一个通过 GtkBuilder 加载的 GtkWidget

我的问题是告诉 Gtk 将它打包到它已经存在的同一个 vbox 中会导致错误,我不知道如何复制它。我想这涉及弄乱指针和引用,这可能就是我错过重点的原因。

static GtkWidget *my_widget(){

        GtkBuilder              *builder;  

        builder = gtk_builder_new ();
        gtk_builder_add_from_file (builder, "widget.glade", NULL);      
        return GTK_WIDGET (gtk_builder_get_object (builder, "widget"));
}

int
main (int argc, char *argv[])
{
        GtkBuilder              *builder;
        GtkWidget               *window;
        GtkWidget               *widget;

        gtk_init (&argc, &argv);

        builder = gtk_builder_new ();
        gtk_builder_add_from_file (builder, "userinterface.glade", NULL);

        window = GTK_WIDGET (gtk_builder_get_object (builder, "mainwindow"));
        gtk_builder_connect_signals (builder, NULL);    

        // Load widget into box
        int i;
        for (i=0; i<5; i++){
            gtk_box_pack_start( GTK_BOX (gtk_builder_get_object (builder, "widget_vbox")),
                                my_widget(),
                                FALSE,
                                TRUE,
                                0);

            if(i!=4){ // Don't add a seperator at the last loop
                widget = gtk_hseparator_new();
                gtk_box_pack_start( GTK_BOX (gtk_builder_get_object (builder, "solo_mission_vbox")),
                                    widget,
                                    FALSE,
                                    TRUE,
                                    0);
                gtk_widget_show(widget);

        }}}

这将使用小部件填充框 5 次,中间有分隔符。问题在于程序打开和关闭同一个文件 5 次只是为了将其放置到位。

如何获取构建器输出并将其“复制”到 5 个完全不同的实例中?它可能涉及很多*s 和&amp;s 的东西。

【问题讨论】:

    标签: c pointers gtk


    【解决方案1】:

    无论您使用多少指针,您都无法“复制”小部件。您在上面的示例中执行此操作的方式是正确的。一项改进是您可以将小部件移动到其自己的较小的构建器文件中。如果小部件很小,您可以考虑制作自己的小部件类并手动构建它,而不是从构建器文件中构建。

    PS。如果你想用 C 编写一个应用程序,你最好学会不要害怕指针!

    【讨论】:

    • 好吧,如果您可以复制它,这将涉及为小部件的每个实例再次构建所有子小部件。除非您实际上注意到性能受到很大影响,否则我不会担心读取文件五次。不要浪费时间优化不需要优化的东西。
    猜你喜欢
    • 2019-07-15
    • 2016-02-24
    • 2011-07-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多