Я много искал, но не смог найти хорошего примера, объясняющего, как использовать webkitgtk с gtkmm 3.0.
Кто-нибудь знает об этом?
Есть ли хороший учебник или пример кода?
Заранее спасибо!
Я знаю, что этот вопрос довольно старый, но я сделал небольшую программу, используя webkitgtk
а также gtkmm-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
На самом деле, это намного проще, так как 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 вместо того, чтобы всегда выделять новый, но вы получаете картина.