Runner in the High

技術のことをかくこころみ

QUrlQueryとQUrlのメモ

Qt4.xでビルドが通っていたソースコードがQt5.1でなぜかビルドエラーを吐くようになった。
調べてみると、Qt5からQUrlメンバ関数だったaddQueryItemが廃止され
変わりにQUrlQueryというクラスが導入されたとのこと。
ということでそれについてのメモ

QUrl target("http://www.example.com/ex.html");

target.addEncodedQueryItem("AAA", "1234");
target.addEncodedQueryItem("BBB", "5678");

上のコードにおいて変数targetには
 http://www.example.com/ex.html?AAA=1234&BBB=5678
といったようなURLが格納される。
デリミタはsetQueryDelimitersを用いて自由に変更できる。
また、QPairでQListコンテナを作りsetQueryItemsでいくつかのクエリを一気に追加することもできる。

このクエリの追加に関して、新たに導入されたのがQUrlQueryとかいうクラス
使い方は実はすごい簡単

QUrl target("http://www.example.com/ex.html");
QUrlQuery q;

q.addQueryItem("AAA", "1234");
q.addQueryItem("BBB", "5678");
target.setQuery(q);

このコードで、上と同じURLが変数targetに格納される。
可読性は上がるんだろうけど、コードそのものは長くなる気がする。
あとはhasQueryItemとか、いくつかのちょっとしたメンバ関数が増えたくらいか。

参考: How do you port QUrl addQueryItem to Qt5's QUrlQuery? - Stack Overflow