Qt 5 の未来は明るいブログ

名古屋Qt勉強会#9 に参加しました

Published: 2013-07-16 / Last modified: 2013-07-16

7月13日に ニューキャスト様セミナールーム で開催された 名古屋Qt勉強会#9 7/13 に参加してきました。

名古屋Qt勉強会 #5 以来、約1年ぶり(多分)4回目の参加になります。

Qt for Android

年末にリリース予定の Qt 5.2 で正式対応となる Qt for Android の最新状況についての発表でした。発表は Qt 5.1 RC1 ベースだったのですが、Qt 5.1 の正式版と Qt Creator 2.8.0 の組み合わせでどのくらい状況が改善されているのかが気になるところでした。

最近お友達に Android 端末をもらったので、何か作ってみようと思います。

RaspberryPiを使ってQtでプレゼン

を実際に自分で試したみたという発表でした。

どうでもいいことなのですが、なるべく短い HDMI ケーブルを用意して、電源もプロジェクターの USB から取って無線のマウスで操作するなどの細かい工夫が必要です。

Qtでウェブサービスを作ろう

QML を使ったシンプルなウェブフレームワーク Silk と、Silk を使って作られた、「あとで」「後で」で始まる自分のつぶやきを、自動で pocket に保存する簡単なサービス Tweet 2 Pocket (ベータ) の紹介をしました。

クライアントサイドもサーバーサイドも Qt で書けるようになると楽ですね。

Q Planetに挑戦中

QtXmlPatterns を使って RSS リーダー?を作るという発表でした。QtXmlPatterns はなかなか使わないのでとても勉強になりました。

Continue reading...

Silk 0.0.1 をリリースしました

Published: 2013-07-04 / Last modified: 2013-07-04

Qt Meta-object Language(以下 QML) という言語を使用したウェブフレームワーク Silk の 0.0.1 をリリースしました。

2012年の秋から少しずつ実装を進めてきた Silk ですが、Qt 5.1 のリリース に合わせて初めてのリリース 0.0.1 を公開しました。

ダウンロードは dev.qtquick.me/projects/silk/files よりお願いします。

$ tar xf silk-0.0.1.tar.gz
$ mkdir build
$ cd build
$ qmake ../silk-0.0.1/
$ make -j4
$ ./bin/silk

動作確認は現在のところ Gentoo Linux amd64 でのみ行っています。

動作報告や、エラー報告などは @task_jp までお願いします。

Qt 5.1 がリリースされました

Published: 2013-07-03 / Last modified: 2013-07-12

2013年7月3日、Qt 5.1 がリリースされました。

昨年末に Qt 5.0 が出て以来、半年以上かけて(予定より少し遅れて)のマイナーアップデートになります。

Qt Quick Controls

Desktop Components という名前で開発されていた Qt Quick 向けのコントロールセットが Qt 5.1 で追加されました。

ボタンテキスト入力 などの基本的なコントロールや、メニューバーステータスバー などのデスクトップアプリケーションには欠かせないもの、さらに テーブルビュー も Qt Quick から使えるようになりました。詳細は Qt Quick Controls のドキュメントを参照してください。

また、ウィンドウのサイズに応じてコントロールの大きさやレイアウトを適切に管理するための Qt Quick Layouts モジュールと、Qt Quick からダイアログを使用するための Qt Quick Dialogs モジュールも追加されています。

Continue reading...

特定の領域にぼかしをかける

Published: 2013-06-22 / Last modified: 2013-06-22

QtGraphicalEffects に含まれる MaskedBlur を使うことで、特定の領域にぼかしをかけることができます。

MaskedBlur の maskSource プロパティが「特定の領域」を指定するためのプロパティで、ここに指定されたアイテムや画像の各ピクセルのアルファ値を元にぼかしの度合いが計算されます。

以下のサンプルは、Flickr の API で取得したサムネイルの一覧を GridView で表示し、ヘッダとフッタの領域に入ったサムネイルをぼかすようにしています。

75行程度のシンプルなソースなので、是非自分でも書いて試してみてください。

import QtQuick 2.0
import QtGraphicalEffects 1.0
import QtQuick.XmlListModel 2.0

Rectangle {
width: 300
height: 450

GridView {
id: view
anchors.fill: parent
model: XmlListModel {
source: 'http://api.flickr.com/services/feeds/photos_public.gne?format=rss2&tags=Shinjuku'
query: '/rss/channel/item'
namespaceDeclarations: 'declare namespace media="http://search.yahoo.com/mrss/";'

XmlRole { query: 'title/string()'; name: 'title' }
XmlRole { query: 'media:thumbnail/@url/string()'; name: 'icon' }
}

delegate: MouseArea {
width: 100
height: 100
Image {
id: icon
anchors.fill: parent
anchors.margins: 5
source: model.icon
fillMode: Image.PreserveAspectCrop
clip: true
}
}
header: Item {
width: view.width
height: 20
}
footer: Item {
width: view.width
height: 40
}
}

MaskedBlur {
anchors.fill: view
source: view
radius: 8
samples: 16
maskSource: mask
}

Item {
anchors.fill: view
opacity: 0.75
Item {
id: mask
anchors.fill: parent
z: 1

Rectangle {
anchors.top: parent.top
anchors.left: parent.left
anchors.right: parent.right
height: view.headerItem.height
}

Rectangle {
anchors.bottom: parent.bottom
anchors.left: parent.left
anchors.right: parent.right
height: view.footerItem.height
}
}
}
}

Qt 5.1 リリース候補版

Published: 2013-06-18 / Last modified: 2013-06-18

Qt 5.1 ベータ版 から1ヶ月経ちましたが、Qt 5.1 のリリース候補版が入手可能になりました

ベータ版以降の変更点は

  • Windows, Mac, Linux 向けのオンラインインストーラーの作成
  • Windows 32bit 及び Linux の 32/64bit で Android に対応
  • MinGW のツールチェインのバージョンが 4.8.0 に
  • 32bit の VS2012 のインストーラーを追加。すべての VS2012 のパッケージは SP2 でビルド
  • Qt 自体をビルドする際の Perl 依存を削除(WebKit は依存しています)

オンラインインストーラー は現在 Qt 5.0.2 及び Qt 5.1.0 RC1 に対応していて、Qt 5.1.0 の正式リリースへアップデートできる予定です。オフラインインストーラー もあります。

Continue reading...

関東Qt勉強会 #16 開催しました

Published: 2013-06-16 / Last modified: 2013-06-17

2013年6月15日(土曜日)に 関東 Qt 勉強会 #16株式会社豆蔵 さんのセミナールームで開催しました。

昨年12月に「次回からの勉強会の運営について」という投稿を 関東Qt勉強会 の Google Groups に投稿して関東の Qt 勉強会の運営を引き継ぎ、第11回第12回第13回第14回第15回 ともくもく勉強会を続けて来ましたが、「半年経ったしそろそろ発表とかしてもいいんじゃない?」という意見を何人かからいただいたので、今回は発表会ということにしました。

今年前半の Qt への貢献のまとめ

私の発表です。Qt の開発の概要や参加方法の紹介と、私の今年前半の Qt への貢献 の簡単な説明をしました。

今年前半も色々 Qt のコードを書きました。後半も頑張ろうw

Continue reading...

Qt Quick から Jubatus を使う

Published: 2013-06-09 / Last modified: 2013-06-09

Jubatus Casual Talks #1 に参加して以来こつこつと作っていた Jubatus Classifier の Qt 用のラッパが最低限の形になったので、 リポジトリを公開 してみました。

準備

あらかじめ Jubatus をインストール しておいてください。

ソースの取得

$ git clone git://git.qtquick.me/qmlplugins/jubatus.git

シャドウビルド〜インストール

$ mkdir build
$ cd build
$ qmake ../jubatus/
$ make
$ make install

サンプルのビルドと実行

$ make sub-examples
$ jubaclassifier -f ../jubatus/examples/cpp/classifier/gender/gender.json & 
$ ./examples/cpp/classifier/gender/jubatus-gender-widget

Qt Quick のサンプルの実行

$ ./examples/qml/classifier/gender/jubatus-gender-quick

Continue reading...

プレースホルダーテキストと日本語入力のバグを修正

Published: 2013-05-27 / Last modified: 2013-05-27

Qt 5 でビルドした Qt Creator に日本語入力ができるようになって、エディタの次に試す場所といったらロケーター(Ctrl+K で出るやつ) ですよね。

それで、Qt 5.1.0 のベータ版 に付属の Qt Creator で試してみたところ、こんな事になるわけです。

かっこわるい。

元々、QLineEdit のプレースホルダーテキストはフォーカスが当たったら消えるようになっていたのですが、今年の2月にマージされた Keep QLineEdit placeholder text visible when focused というコミットで、フォーカスが当たった状態でもテキストが空であれば表示するように変更されていたようです。

日本語などを入力する際には Preedit Text と呼ばれる未確定の入力文字を使用するので、そちらも考慮するよう hide placeholder text when QLineEdit has preedit text というパッチをでっち上げてプッシュました。

Qt の日本語入力に関係する部分はちょっと気を抜くとすぐに変になるので、気をつけましょう。

Qt Creator をプレゼンテーションモードで動かす

Published: 2013-05-27 / Last modified: 2013-05-27

Qt Creator がクラッシュした際に出てくる クラッシュハンドラ を消す方法が無いかを知りたくて Qt Creator の起動オプションを数年ぶりにチェックしたところ、見慣れないオプションがあったので試してみました。

$ ./bin/qtcreator -presentationMode

このオプションをつけることで、Qt Creator でショートカットキーを使用した際に、そのキーの組み合わせが一瞬ポップアップ表示されるようになります。

Qt Creator に限った話ではないですが、開発環境などでショートカットキーを多用するようになると他の人には何をやっているのか分からないことがあります。プレゼンの時など他の人も見ている場合にこのオプションを使うことで「いま何かキー操作した?」という場面が減ってお互い幸せになれるのではないでしょうか。

JavaScript を Qt っぽくする

Published: 2013-05-20 / Last modified: 2013-05-20

元ネタは Qtified JavaScript

Qt Quick に移行して以来、JavaScript を使う機会が増えましたが、Qt の綺麗な API に慣れていると JavaScript の API って少し不便に感じる事があります。そのひとつが bool QList::contains(const T & value) const がないことで、今回は JavaScript にこの contains() を追加してみるとういう試みです。

Array.prototype.contains = function(e) {
    return this.indexOf(e) !== -1;
}

と書いた qtified.js ファイルを作成し、qml ファイルの先頭で

import 'qtified.js' as JS

と書いておくと

MouseArea {
anchors.fill: parent
property var names: ["Egon", "Peter", "Raymond", "Waldo"] onClicked: {
console.debug(names.contains('Egon'))
}
}

のような書き方ができるようになります。

しかし、このやり方は少しまずくて、

for (var i in names)
print(i);

を実行すると以下のように表示されてしまいます。

0
1
2
3
contains

JavaScript 1.8.5 以降使用可能な Object.defineProperty を使うことでこの問題を解決することができて、qtified.js は以下のように変わります。

.pragma library
Object.defineProperty(Array.prototype, "contains", {
value: function(e) { return this.indexOf(e) !== -1; }, enumerable: false // This is the default and can be omitted.
})

対処療法的ではありますが、おもしろい試みですね。