在 gtkmm 中创建多个 windows

Creating multiple windows in gtkmm

我开始学习 gtkmm 库,可能不了解它的工作方式。这就是问题所在:我从 gtkmm tutorial 复制了一个简单的示例,并希望通过单击按钮对其进行修改以创建任意数量的 windows。

为什么我不能像下面的函数 on_button_clicked() 那样编写代码?

class Hello : public Gtk::Window {
public:
    Hello() :m_button("create copy") {
        set_border_width(20);
        m_button.signal_clicked().connect(sigc::mem_fun(*this, &Hello::on_button_clicked));
        add(m_button);
        show_all_children();
    }

protected:
    void on_button_clicked();

    Gtk::Button m_button;

};

void Hello::on_button_clicked() {
    Hello new_window;
    new_window.show();
}

int main (int argc, char *argv[])
{
    auto app = Gtk::Application::create(argc, argv, "org.gtkmm.example");

    Hello hw;

    return app->run(hw);
}

未显示新 window 的原因是 C++ 在方法 Hello::on_button_clicked().

中的使用方式

行:

  Hello new_window;

创建一个具有本地作用域的新 window。

  new_window.show();

这标志着 window 在 GTK+ 重新控制时显示。

  }

退出方法,所有局部变量都被销毁。这意味着 new_window 还没有被看到就被删除了。

要保留 window 并显示它,必须存储对象以使其不会自动销毁。这可以在堆上分配,并在另一个 class 中保存一个指向它的指针,以便于访问 window.