2011年12月22日木曜日

RewitQ を Proxy 対応にしてみた #qtjp


RewitQとは

@IoriAYANE さんが開発している超マルチプラットフォーム対応済なTwitterクライアントです。
Rewit -Twitter Client for Qt-

手を出したわけ

@task_jpさんからRewitQの存在を知り、伊織さんをフォロー。2週間後ぐらいにQtDevelopperConfarenceがあり名古屋勉強会のブースに立ってた方でした。
で、QMLすげぇ!!ってことでとりあえずRewitQを眺めようと思ったのです。しかし、学校でソースをチェックアウトして実行するとProxyに阻まれて悲しいエラーが。そこで、まずはProxy対応しなきゃなという次第です。ソース取り出そうと思ってからここまで3分

方法

ググった、以上(ぉ
いや、半分本当なんですけどね。
Flickr Example
Qt Quickに興味がある方は一度は見たであろうサンプルプログラムですね。実はそこにまんまProxy対応のほうほうが書いてあるのです。
Proxy使ってない人は読み飛ばしてるかもしれませんが、実に丁寧ですね
というわけで、そのまんまコードをパクりました。
syntax highlighterの使い方を忘れてしまったのでとりあえずベタ打ちしておきます

[RewitQ.pro]
+Qt += network

[main.cpp]
+#include <qnetworkproxy>
+#include <qurl>
main(){
+QUrl proxyUrl(qgetenv("http_proxy"));
+ if (proxyUrl.isValid() && !proxyUrl.host().isEmpty()) {
+ int proxyPort = (proxyUrl.port() > 0) ? proxyUrl.port() : 8080;
+ QNetworkProxy proxy(QNetworkProxy::HttpProxy, proxyUrl.host(), proxyPort);
+ QNetworkProxy::setApplicationProxy(proxy);
+ }
}

簡単ですね!というか、まんまなので、何も考える必要はありません。環境変数から読みだしてくれるので実用的です。
ちなみに、環境変数は次のようになっていると思います。(Ubuntu Oneiric)

nekomatu@nekomatu-i3note:~/dev$ env | grep proxy
http_proxy=http://172.24.2.10:12080/
ftp_proxy=ftp://172.24.2.10:12080/
all_proxy=socks://172.24.2.10:12080/
socks_proxy=socks://172.24.2.10:12080/
https_proxy=https://172.24.2.10:12080/
no_proxy=localhost,127.0.0.0/8

こんなふうにURL形式で記述されていますのでqgetenvで環境変数を読んでQUrlに入れておきます。これでコロンで指定されたポートなどにも超簡単に取り出せるわけです。素敵。ここまで15分ぐらいです

ハマってしまったところ

Flickerの記事はすぐに出てきたのですが、QNetworkproxyが見つからないとか出てきてしょんぼりしておりました。
そもそも、QNetで候補が上がってこないのがおかしいなぁということで調べたところ、プロジェクトで宣言しておくということを知りました。
いかにも初心者にありそうな感じです。
QtNetwork Module
To link against the module, add this line to your qmake .pro file:

QT += network

0 件のコメント:

コメントを投稿