在 gtkmm3 中使用 Gtk::Assistant

Posted

技术标签:

【中文标题】在 gtkmm3 中使用 Gtk::Assistant【英文标题】:Using Gtk::Assistant in gtkmm3 【发布时间】:2021-07-09 10:01:49 【问题描述】:

我有一个 gtkmm3 应用程序,我计划在其中使用派生自 Gtk::Assistant 的类来执行一些用户配置。由于Gtk::Assistant 派生自Gtk::Window(而不是Gtk::Dialog),因此我无法调用run() 来显示助手。

正如这本好书所说,我使用Gtk::Application::run(window) 来调出主应用程序窗口,但我不知道如何在 gtkmm3 应用程序中从我的主窗口显示第二个窗口。在 gtkmm2.4 中,我很确定 Gtk::Main::run(assistant) 会完成这项工作。我觉得完全愚蠢,即使在浏览了 gtk-demo 源代码之后我也无法弄清楚这一点。一些帮助将不胜感激。

【问题讨论】:

既然继承自Gtk::Window,就不能直接调用show或者show_all_children吗? 【参考方案1】:

您可以像调用任何其他窗口一样调用show()。例如:

#include <gtkmm.h>

class MainWindow : public Gtk::Window


public:

    MainWindow()
    
        m_button.set_label("Click to show assistant...");
        m_button.signal_clicked().connect([this]()ShowAssistant(););

        add(m_button);
    

private:

    void ShowAssistant()
    
        m_assistant.show();
    

    Gtk::Button m_button;
    Gtk::Assistant m_assistant;
;

int main(int argc, char *argv[])

    auto app = Gtk::Application::create(argc, argv, "gtkmm.example");
  
    MainWindow window;
    window.set_default_size(200, 200);
    window.show_all();
  
    return app->run(window);

【讨论】:

感谢您的详细回答...我意识到我的错误,我在主窗口的成员函数中创建了Gtk::Assistant 实例。因此,一旦执行离开函数,实例就会被删除,并且对show()(作为非阻塞函数)的调用将无效。再次感谢您。

以上是关于在 gtkmm3 中使用 Gtk::Assistant的主要内容,如果未能解决你的问题,请参考以下文章

使用 Gtk::Viewport (gtkmm3) 直接滚动

Gtkmm3 TreeView ListStore.Clear 或 TreeSelection.unselectAll 导致错误

GTKmm3 (GTK+ 3 C++) 编译但运行时抛出 GLib-GIO-CRITICAL 错误

gtkmm 3 窗口 64 位

gtkmm 3.10.1 中带有 CSS 的 Gtk::Box 样式问题

在菜单中显示加速键