销毁gtkmm消息对话框?

时间:2013-09-01 01:07:20

标签: c++ messagebox gtkmm

我使用的是gtkmm 3.0.1,在用户单击按钮后创建Gtk::MessageDialog对象以销毁对话框时,我没有看到任何选项。我发现破坏消息对话框的唯一方法是在辅助函数中调用它,但我觉得这有可能被避免。文档中没有提到破坏它的方法,只提到用户可以销毁它。

这是我的代码:

#include <gtkmm.h>
#include <iostream>

using namespace std;

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

    Gtk::Main kit(argc, argv);
    Gtk::Window client;

    Gtk::MessageDialog dialog("Info", false, Gtk::MESSAGE_QUESTION, Gtk::BUTTONS_YES_NO);
    dialog.set_secondary_text( "Dialog");
    dialog.set_default_response(Gtk::RESPONSE_YES);
    dialog.run();

    cout << "dialog is still open, needs to be destroyed at this point." << endl;

    Gtk::Main::run(client);

    return EXIT_SUCCESS;

}

1 个答案:

答案 0 :(得分:6)

问题是您已在Gtk::MessageDialog中的堆栈上创建了int main。由于该功能在您的程序执行MessageDialog之前不会退出。

几个选项:

1。)Hide the dialog完成后,它会在主要退出时被销毁。

2。)然后将其删除。

Gtk::MessageDialog* dialog = new Gtk::MessageDialog("Info", false, Gtk::MESSAGE_QUESTION, Gtk::BUTTONS_YES_NO);
dialog->set_secondary_text( "Dialog");
dialog->set_default_response(Gtk::RESPONSE_YES);
dialog->run();
delete dialog;    

3.。)在它自己的函数或块中创建它,以便在该范围退出时将其销毁。

void showDialog() {
    Gtk::MessageDialog dialog("Info", false, Gtk::MESSAGE_QUESTION, Gtk::BUTTONS_YES_NO);
    dialog.set_secondary_text( "Dialog");
    dialog.set_default_response(Gtk::RESPONSE_YES);
    dialog.run();
}

int main(int argc, char *argv[]) {
    etc...
    showDialog();
    Gtk::Main::run(client);
    etc...
}