Использование Gtk::Помощник в gtkmm3

#gtk #gtkmm #gtkmm3 #gtkassistant

Вопрос:

У меня есть приложение gtkmm3, в котором я планирую использовать класс, производный от Gtk::Assistant него, для выполнения некоторой конфигурации пользователя. Как Gtk::Assistant следует из Gtk::Window (и не Gtk::Dialog ) run() , я не могу позвонить, чтобы отобразить помощника.

Как говорится в хорошей книге, я использую Gtk::Application::run(window) для открытия главного окна приложения, но я не знаю, как отобразить второе окно из моего главного окна в приложении gtkmm3. В gtkmm2.4 я почти уверен, что a Gtk::Main::run(assistant) сделал бы эту работу. Я чувствую себя совершенно глупо, что даже после просмотра исходного кода gtk-demo я не могу этого понять. Некоторая помощь была бы признательна.

Комментарии:

1. Поскольку он наследуется от 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);
}
 

Комментарии:

1. Спасибо вам за подробный ответ… Я понял свою ошибку, я создавал Gtk::Assistant экземпляр внутри функции-члена главного окна. Таким образом , как только выполнение покинет функцию, экземпляр будет удален, и вызов show() , являющийся неблокирующей функцией, не будет иметь никакого эффекта. Еще раз спасибо вам.