每个人。
我正在使用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((未被编译器识别。