【问题标题】:Example of using webkitgtk with gtkmm 3.0将 webkitgtk 与 gtkmm 3.0 一起使用的示例
【发布时间】:2013-06-11 08:48:33
【问题描述】:

我进行了很多搜索,但找不到一个很好的示例来解释如何将 webkitgtk 与 gtkmm 3.0 一起使用。

有人知道吗? 有没有好的教程,或者示例代码?

提前致谢!

【问题讨论】:

    标签: c++ gtkmm webkitgtk


    【解决方案1】:

    我知道这个问题很老,但我只是使用webkitgtkgtkmm-3 做了一个小程序。它可能对其他人有用,所以我分享它:

    #include <gtkmm.h>
    #include <webkit2/webkit2.h>
    
    int main( int argc
            , char **argv
            )
    {
      Glib::RefPtr<Gtk::Application> app = Gtk::Application::create( argc, argv, "" );
    
      Gtk::Window window;
      window.set_default_size( 800, 600 );
    
      WebKitWebView * one =  WEBKIT_WEB_VIEW( webkit_web_view_new() );
      /*
       * the next line does some tricks :
       * GTK_WIDGET( one ) -> convert WebKitWebView to GtkWidget (one->two)
       * Glib::wrap( GTK_WIDGET( one ) ) -> convert GtkWidget to Gtk::Widget (two->three)
       */
      Gtk::Widget * three = Glib::wrap( GTK_WIDGET( one ) );
    
      window.add( *three );
      webkit_web_view_load_uri(one, "http://stackoverflow.com/questions/17039942/example-of-using-webkitgtk-with-gtkmm-3-0");
    
      window.show_all();
    
      app->run( window );  
      exit( 0 );
    }
    

    我不知道这是否是一个好方法,但它到目前为止有效!

    编译命令:

    $ g++ main.cc `pkg-config gtkmm-3.0 --libs --cflags` `pkg-config webkit2gtk-4.0 --libs --cflags` -std=c++1
    

    对于 MS Windows 用户,我不是种族主义者,但我不知道如何在 Windows 上编译。任何评论都将不胜感激,我自己编写了这段代码。感谢报告任何错误。

    您应该会看到如下内容:

    注意使用 webkit2gtk 的版本,使用 gtk3 否则会出错:

     (a.out:5783): Gtk-ERROR **: GTK+ 2.x symbols detected. Using GTK+ 2.x and GTK+ 3 in the same process is not supported
    

    【讨论】:

    • 太棒了!完美使用。
    【解决方案2】:

    实际上,它要简单得多,因为 Web View 是一个小部件。最低限度的实现可能如下所示:

    class CWebView : public Gtk::Widget
    {
    public:
    
        CWebView ()     //  Might want to protect this
            : Gtk::Widget ((webkit_web_view_new()) {}
        virtual ~CWebView () {};
    
        operator WebKitWebView * () //  Allow this to stand in for a Web View
        {   return WEBKIT_WEB_VIEW(gobj()); }
    
        //  Wrap any functions you want to use like this:
        void load_uri (const gchar *strUri)
        {   webkit_web_view_load_uri(*this, strUri);    }  
        // Note that, thanks to the cast operator, *this can
        // replace WebKitWebView pointers
    };
    

    所以上面代码的相关部分是:

    CWebView   *pView = new CWebView;
    window.add (*pView);
    pView->load_uri ("http://stackoverflow.com/questions/17039942/example-of-using-webkitgtk-with-gtkmm-3-0");
    

    您可能希望保护构造函数并添加一个静态 create () 函数以确保它始终使用 new () 分配,并且您可能希望允许它“包装”现有的 web_view 对象而不是总是分配一个新对象,但是你明白了。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2020-06-29
      • 2014-09-10
      • 1970-01-01
      • 2022-01-22
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-04-17
      相关资源
      最近更新 更多