显示窗口时出现 Gtkmm 分段错误



我正在学习 gtkmm 库,我直接撞到了一堵砖墙。

我使用的是 3.22.2 版。

当我在主窗口上调用 present,我编写的这个简单程序出现 seg 错误,我不知道为什么。

我在下面的代码中包含了一条注释,它断码了。

#include <gtkmm.h>
using namespace Gtk;
using namespace std;
class App : public Application {
protected:
    App() : Application() {}
    void onWindowHide( Window *window ) { delete window; }
    void on_activate() override {
        ApplicationWindow *mainWindow = createMainWindow();
        mainWindow->present(); // it gets a SEG_FAULT here
    }
    ApplicationWindow *createMainWindow() {
        Gtk::ApplicationWindow *mainWindow;
        mainWindow = new ApplicationWindow();
        add_window( *mainWindow );
        mainWindow->signal_hide()
                  .connect( sigc::bind<Gtk::ApplicationWindow *>(
                          sigc::mem_fun( *this, &App::onWindowHide ), mainWindow ));
    }
public:
    static Glib::RefPtr<App> create() {
        return Glib::RefPtr<App>( new App());
    }
};

int main( int argc, char *argv[] ) {
    auto app = App::create();
    return app->run();
}

方法createMainWindow没有返回值。 on_active 方法中的指针 mainWindow 可能设置为 nullptr。

 ApplicationWindow *createMainWindow() {
    Gtk::ApplicationWindow *mainWindow;
    mainWindow = new ApplicationWindow();
    add_window( *mainWindow );
    mainWindow->signal_hide()
              .connect( sigc::bind<Gtk::ApplicationWindow *>(
                      sigc::mem_fun( *this, &App::onWindowHide ), mainWindow ));
    return mainWindow;
} 

相关内容

  • 没有找到相关文章

最新更新