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

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.
})

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

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

Published: 2013-05-19 / Last modified: 2013-06-16

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

今回ももくもくスタイルでの開催でした。

Qt もくもく会 との同時開催

Qt ブームの到来を予感させるこのかぶりっぷりw 今回は別々での同時開催という事になりましたが、両方とも新宿で行っていたということもあり、合流して懇親会を行いました。めでたしめでたし。

PaintField の紹介


seanchas_t さんが2年前から開発しているというお絵描き・画像編集ソフト。

ソースコードは github で公開されています。ビルドには、clang の 3.2 か gcc 4.8 が必要で、64bit OS で動作します。

前回の勉強会 では FireAlpaca さんの作者の方がいらっしゃってましたが、Mac でもそれ以外でも動かしたいアプリケーションを開発する場合には Qt って便利ですよね。

qimsys の Qt 5 対応

作業はあまり進まず。。。

関東Qt勉強会 #16 #qtjp

次回は 6/15 に開催します。参加登録いつやるの(ry

Continue reading...