代码之家  ›  专栏  ›  技术社区  ›  egregious

Gtkmm无法在OSX上打开应用程序窗口

  •  0
  • egregious  · 技术社区  · 11 年前

    我已经通过自制程序安装了gtkmm3。我的项目链接和构建没有错误,但从不打开窗口。xQuartz/X11在成功构建后也会启动。它似乎在Gtk::Application::create()调用期间挂起。我已将代码包含在下面。基于Xcode 5.1。非常感谢任何帮助。

    谢谢

    #include <iostream>
    #include <gtkmm-3.0/gtkmm.h>
    
    
    int main(int argc, char * argv[])
    {
    
    
        std::cout << "Creating Application" << std::endl;
        Glib::RefPtr<Gtk::Application> app = Gtk::Application::create(argc, argv, "some.thing.here");
    
    
        std::cout << "Creating Window" << std::endl;
        Gtk::Window window;
    
        std::cout << "Setting window title" << std::endl;
        window.set_title("Window One");
    
    
        std::cout << "Running App" << std::endl;
        return app->run(window);
    
    }
    
    1 回复  |  直到 11 年前
        1
  •  1
  •   egregious    11 年前

    Gtk::Application::create()似乎挂起,因为X11没有响应对窗口的请求。在当前(默认情况下,我假设)状态下,只有root用户可以请求窗口。

    理想的解决方案(最适合我的方案): 转到产品>方案>在XCode主菜单中编辑方案。确保在弹出菜单中选择了当前方案(或任何开发方案)。在打开的模式上有几个单选按钮。选择“以root身份运行”选项。现在X11应该响应窗口请求。

    另一种解决方案: 编译程序并使用sudo运行。

    一个更复杂的解决方案,但如果您打算最终让某人通过ssh使用此程序。。。

    使用xhost添加用户并启用ssh转发,这样您就可以通过ssh运行编译后的版本而无需sudo。有很多文档在解释如何做到这一点,所以我不会在这里详细说明。

    另一条注释 XCode生成一个带有常量char argv的主函数。Gtk::Application::create()不会接受常量字符argv。从main的argv中删除const,一切正常。