#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()
, являющийся неблокирующей функцией, не будет иметь никакого эффекта. Еще раз спасибо вам.