【问题标题】:Initialize a Gtk::Window derived class with a Gtk::Builder用 Gtk::Builder 初始化 Gtk::Window 派生类
【发布时间】:2019-02-21 04:40:33
【问题描述】:

我有一个 Glade 布局编译到一个 gresource 中,我在我的构造函数中手动设置为 Gtk::Window 对象。我现在使用的代码的简化版本是:


MyClass::MyClass()
{
    Gtk::Window *window;
    Glib::RefPtr<Gtk::Builder> builder = Gtk::Builder::create_from_resource("/layouts/mywindow.glade");
    builder->get_widget("myWindow", window);
    window->show();
}

*注意:这不是我的实际代码,它只是我正在做的一个非常简化的版本。

我想使用 Gtk::Window 作为基类,然后像这样“运行”我的类:

#include "myclass.h"

int main(int argc, char *argv[])
{
    Gtk::Main kit(argc, argv);

    MyClass helloworld;

    kit.run(loginScreen);

    return 0;
}

但我似乎无法弄清楚如何使用构建器将布局插入/分配给 Gtk::Window 基类。我相当确定我需要使用 get_widget_derived 但我似乎无法弄清楚如何在构造函数中使用它(......或者你不能在构造函数中使用它吗?)。例如,将我的类定义更改为:

class MyClass : public Gtk::Window
{
public:
    MyClass(BaseObjectType* cobject, const Glib::RefPtr<Gtk::Builder>& refBuilder);
}

我应该在我的构造函数中放入什么来将构建器中的布局放入基础 Gtk::Window 中?

MyClass::MyClass(BaseObjectType* cobject, const Glib::RefPtr<Gtk::Builder>& refBuilder)
    : Gtk::Window(cobject)
{
    Glib::RefPtr<Gtk::Builder> builder = Gtk::Builder::create_from_resource("/layouts/mywindow.glade");
    // What goes here?
    // something like?: builder->get_widget_derived("myWindow", ???);
}

【问题讨论】:

    标签: c++ gtkmm gtkmm3


    【解决方案1】:

    将需要函数get_widget_derived 来创建该基础对象,因此您不能延迟以这种方式调用它。您可以使用静态函数来完成此操作,它将为您生成所有内容

    #include "myclass.h"
    int main(int argc, char *argv[])
    {
        Gtk::Main kit(argc, argv);
    
        MyClass* helloworld = MyClass::getInstance();
    
        kit.run(*helloworld);
    
        return 0;
    }
    

    具有以下定义:

    MyClass* MyClass::getInstance() // a static function
    {
        MyClass* result;
        Glib::RefPtr<Gtk::Builder> builder = Gtk::Builder::create_from_resource("/layouts/mywindow.glade");
        builder->get_widget_derived("NameOfMyWindow", result);
        return result
    }
    

    然后构造函数就很简单了:

    MyClass::MyClass(BaseObjectType* cobject, const Glib::RefPtr<Gtk::Builder>& refBuilder)
        : Gtk::Window(cobject)
    {
        // Start doing stuff, because the object is constructed
    }
    

    注意:此代码未经测试

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2019-10-03
      • 2020-08-19
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2022-12-03
      相关资源
      最近更新 更多