Extending Qt WebKit/ja

From Qt Wiki
Jump to: navigation, search
This article may require cleanup to meet the Qt Wiki's quality standards. Reason: Auto-imported from ExpressionEngine.
Please improve this article if you can. Remove the {{cleanup}} tag and add this page to Updated pages list after it's clean.
English Catalan Spanish French 日本語

Qt WebKit の拡張方法

QtWebKit モジュールを使うことで、Qt と WebKit にある機能を組み合わせて拡張することができます。C++ と Web デザインのハイブリッドは様々な理由で人気を得ています。そこには、チームが熟練した Web 開発者達の巨大なコミュニティの力を借りることができるという事実もあります。

Qt Quarterly の一連の記事はそれに関わる技術と課程の良い紹介と言えるでしょう。

ネットワークインターフェースの作成

ハイブリッドデザインでは、しばしばネットワークインターフェースを扱う Qt 独自のコードが必要となります。Using a Simple Web Service with Qt (Qt で簡単な Web サービスを使う) では MathTran Web サービスを使って TeX 形式のテキストのプレビュー画像を表示しています。2007年の記事で使われたクラスは今では使用が推奨されていないため、読む価値はありません。

Web ベースのユーザーインターフェースに Qt のウィジェットを追加する

David Boddie の書いた Plugging into the Web (Web でのプラグイン)では、Web ベースのユーザーインターフェースに Qt のウィジェットを埋め込む方法を説明しています。その記事は基本的な Doc:QWebView の使い方で Web ページを表示するところから始まっています。

 int main(int argc, char *argv[])
 {
 QApplication app(argc, argv);
 QWebView view;
 view.load(QUrl("http://www.trolltech.com/"));
 view.show();
 return app.exec();
 }

その後、CSV ファイルを表示する簡単なウィジェットの作り方を Doc:QWebPluginFactory を用いて説明しています。

QtWebKit に新しいプロトコルを追加する

David がその後に書いた Adding New Protocols to QtWebKit (QtWebKit に新しいプロトコルを追加する) では Qt のネットワークアクセス API と WebKit を用いて、Doc:QWebView を簡単な FTP クライアントに仕立てました。Qt のネットワークアクセス API は、QHttp と QFtp クラスで提供されていた機能の多く(全てではありませんが)を置き換えることを目的とした技術です。ネットワークアクセス API は Qt 独自の技術ではありますが、QtWebKit モジュールでこの Qt の技術と WebKit を統合させており、Qt アプリケーションの開発者はこのブラウザエンジンをカスタマイズすることができます。それはまた、このブラウザエンジンがデータを取得して描画する方法もコントロールすることを意味します。

Doc:QNetworkRequestDoc:QNetworkReply はネットワークの操作を抽象化して再利用できるように設計されているため、これらのクラスを使って QtWebKit を使って書かれたブラウザに FTP のサポートを追加できることは明らかです。そこで、QtWebKit モジュールがネットワークアクセスクラスを使ってどのようにネットワークの操作を管理しているか確認する前に、まずはネットワークアクセスクラス自体を調べる必要があります。

以下のコードは Doc:QWebPage で使われている既存のネットワークマネージャを置き換えるための、Doc:QNetworkAccessManager の派生クラスの作成方法を示しています。このクラスで、URL が FTP プロトコルかどうかをチェックする createRequest() 関数を再実装しています。

NetworkAccessManager::NetworkAccessManager(QNetworkAccessManager *manager, QObject *parent)

: QNetworkAccessManager(parent)

{

setCache(manager->cache());
setCookieJar(manager->cookieJar());
setProxy(manager->proxy());
setProxyFactory(manager->proxyFactory());

}