在gtkmm中创建多个窗口

时间:2018-01-11 21:03:05

标签: gtkmm

我开始学习gtkmm库,可能不了解它的工作方式。问题在于:我从gtkmm tutorial复制了简单的示例,并希望通过单击按钮修改它以创建任意数量的窗口。

为什么我不能像下面的函数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);
}

1 个答案:

答案 0 :(得分:0)

未显示新窗口的原因是方法Hello::on_button_clicked()中如何使用C ++。

该行:

  Hello new_window;

创建一个具有局部范围的新窗口。

  new_window.show();

这标志着当GTK +重新掌控时显示的窗口。

该行

  }

退出方法并销毁所有局部变量。这意味着new_window在被查看之前就被删除了。

要保持窗口并显示该对象必须存储,以便不会自动销毁它。这可以在堆上分配,并在另一个类中保存一个指针,以便于访问窗口。