Gtkmm 3/C++,使用按钮而不是窗口关闭程序"X"



每个人。

我正在使用GTKMM应用程序,需要一些帮助获得"关闭"按钮才能工作。正如GTKMM文档所建议的那样,我得出了一个主窗口对象的类,创建了一些成员,然后将main((函数主要用于读取GLADE UI文件,实例化表单并启动主循环。

有3个文件,可方便地说明:声明。

在" neclarations.h"中,我从GTK窗口中继承了类:

#include <gtkmm.h>
class MainWindowClass : public Gtk::ApplicationWindow
{
protected:
    Gtk::Button *button_close;
    // other buttons here
protected:
    void on_button_close_clicked();
    // other callback functions here
public:
    MainWindowClass(BaseObjectType *cobject, const Glib::RefPtr<Gtk::Builder> &refGlade); // Constructor
    // Destructor, other public members
};

在" neclarations.cpp"中,我有实现:

#include "Declarations.h"
using namespace Gtk;
// Implementing the constructor
MainWindowClass::MainWindowClass(BaseObjectType *cobject, const Glib::RefPtr<Gtk::Builder> &refGlade) :
    Gtk::Window(cobject), builder(refGlade)
{
    builder->get_widget("button_close", button_close);
    // Getting other widgets from the glade file
    button_close->signal_clicked().connect(sigc::mem_fun(*this, &MainWindowClass::on_button_close_clicked));
    // Connecting other callback functions here
}
// Implementing the callback for the "Close" button, ** PROBLEM IS HERE **
void MainWindowClass::on_button_close_clicked()
{
    //gtk_main_quit(); Apparently GTK+/C only, compiler doesn't complain but causes a segfault when clicking the button
    //Gtk::Application::quit(); Won't compile
}

program.cpp从文件中读取UI并启动主程序循环:

#include <gtkmm.h>
#include "Declarations.h"
int main(int argc, char *argv[])
{
    auto app = Gtk::Application::create(argc, argv, "Damn this close button");
    Glib::RefPtr<Gtk::Builder> builder = Gtk::Builder::create_from_file("Program_UI.glade");
    MainWindowClass our_main_window;
    return app->run(our_main_window);
}

我正在省略一些非相关的代码(其他对象和回调的代码(,因为它们有效,这是一个近距离的过程引起了我麻烦,尽管用" x"关闭了应用程序。我还考虑过尝试调用" app"的Quit((函数(如果存在(,但是回调函数不知道" app"。你们建议什么?

非常感谢。


**编辑:使用formmain :: hide((修复了此操作,该((是从gtkwindow继承的。我认为静态过程GTK :: main :: hide((会这样做,但是编译器说hide((不是GTK的成员:: main ...好吧,一次向前迈进。

使用的formmain :: hide(((从gtkwindow继承(。静态过程gtk :: main :: hide((未被编译器识别。

相关内容

  • 没有找到相关文章

最新更新