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

オープンソースカンファレンス 2014 Tokyo / Spring 1日目

Published: 2014-02-28 / Last modified: 2014-02-28

2月28日から2日間にわたり 明星大学 日野キャンパス で開催されている オープンソースカンファレンス 2014 Tokyo / Spring ですが、日本 Qt ユーザー会 として参加しています。

今回は、ブース当番や展示内容がちゃんと用意できるか若干不安ではありましたが、ユーザー会のみなさんの協力のおかげで無事一日目を終えることができました。

展示ブース:日本 Qt ユーザー会

日本 Qt ユーザー会のブースでは、最新の Qt 5 のデモが動作している iPad mini、iPod touch、Galaxy III などのスマートデバイスに加え、PC での開発環境やドキュメントなどの展示、それから日本語で書かれた Qt に関する書籍の展示を行いました。

セミナー:Qtではじめるクロスプラットフォームアプリケーション開発

金曜の朝一ということで聞きにこられる方がどのくらいいるか少し心配していましたが、10名以上の方に来ていただき、Qt の紹介と簡単なアプリ開発のデモをお見せしました。

参加者の方からいただいた質問は以下のとおりでした。

デスクトップアプリも今後は QtQuick で作る方向になるの?
はい。Qt 5.1 から QtQuickControls というモジュールが追加されています。現段階ではまだまだ未成熟な部分もありますが、積極的に開発が進められていて将来的には QtQuick でデスクトップアプリを開発できるようにしていく予定です。
その場合、C のライブラリとかは使えますか?
QtQuick は Qt/C++ で拡張可能になっています。C のライブラリをラップする QObject の派生クラスを作って qmlRegisterType で登録することによって QtQuick から C のライブラリなどを実行するようにすることが可能です。
iOS や Android の開発はちゃんとできますか?
どちらも Qt 5.2 で正式に対応したばかりのため、まだまだ不安定な部分もあります。バグを見つけた場合は是非バグ報告をお願いします。
iOS と Android に対応する場合も同じソースで作るのか?
同じソースで同じように作ることも可能です。UI は個別に最適化する場合でも9割以上のソースコードを共通で使うようにすることができると思います。
モバイルアプリを配布する場合、Qt の中の使用していない機能を削除できたりしませんか?
Qt 自体には qconfig という、機能単位でコードを削除するための仕組みはありますがサポート外で、メンテナンスもほとんどされていません。

Continue reading...

Qt 勉強会 #8 @Tokyo 開催しました

Published: 2014-02-16 / Last modified: 2014-02-16

2014年2月15日(土曜日)に Qt 勉強会 #8 @Tokyo株式会社 PTP さんのミーティングルームで開催しました。

大雪の影響で4人という少ない人数での開催となりましたが、今回もとても充実した会になりました。

もくもく:mpeg2ts と格闘

前回 の懇親会で「gstreamer の Qt 版作ってみようよ!?」っていう話で盛り上がったので、色々作りはじめているのですが、今日は ISO 13818-1 を読みながら、Mpeg2TS のパケットを映像のストリームと音声のストリームに分けるライブラリ?を作るにはどう設計したらいいのかをひたすら考えていました。

途中で飽きるかもしれませんが、お勉強がてら色々作ってみようと思っています。

その他の参加者の話

QGraphicsView を使ってモンキーハンティングっぽいゲームを作っていたり、tesseract-ocr の GUI のフロントエンドを作っていたり、艦メモ に貢献するための環境作りに四苦八苦していたりと、それぞれ自分のやりたいことに真剣に取り組んでいたようです。

Continue reading...

QtQuick のパフォーマンス:プロファイリング

Published: 2014-01-29 / Last modified: 2014-01-29

Performance Considerations And SuggestionsProfiling を訳してみました。

プロファイリング

Qt Creator に含まれる QML プロファイリングツールを使用することがとても大事です。アプリケーションの中のどこで時間が消費されているのかを知ることで、現実的な問題の解決にフォーカスすることができます。QML プロファイリングツールの使い方については Qt Creator のドキュメントを参照してください。

もっとも頻繁に動作しているプロパティバインディングや、多くの時間を費やしている関数を知ることにより、その部分を最適化したり、設計自体を見直したりしてパフォーマンスの改善をすることができるようになります。プロファイリングを行わずに最適化を試みても、大幅な改善は見込めないでしょう。

QtQuick のパフォーマンス:タイミングを考慮する

Published: 2014-01-27 / Last modified: 2014-01-27

Performance Considerations And SuggestionsTiming Considerations を訳してみました。

タイミングを考慮する

アプリケーションの開発者であるみなさんは、Qt の描画エンジンが 60 フレーム毎秒のリフレッシュレートでコンスタントに描画ができるよう努力をしなければいけません。60 FPS というのは、フレーム間のおおよそ 16 ミリ秒以内に各処理が終了する必要があることを意味し、これには描画のプリミティブをグラフィックスハードウェアにアップロードする処理も含まれます。

実際にアプリケーション開発者がすべきことは以下のとおりです。

  • 非同期のイベント駆動の処理を心がける
  • 重い処理は別スレッドで行う
  • イベントループを自分で回さない
  • 数ミリ秒ブロックする処理をフレーム毎に行わない

これらが適切に守られない場合にはフレーム落ちが発生し、ユーザーの使い勝手に大きな影響がでます。

※注意: QML から実行される C++ のコード内で、処理をブロックしないように独自の QEventLoop を使用したり QCoreApplication::processEvents() を実行するのは危険です。シグナルハンドラの処理やバインディングの処理中にそのようなイベントループに入った場合でも QML エンジンは他のバインディングやアニメーション、トランジションなどの処理を続けます。これにより、両者のデータの整合性がとれなくなることがあります。

Qt 勉強会 #7 @Tokyo 開催しました

Published: 2014-01-26 / Last modified: 2014-01-26

2014年1月25日(土曜日)に Qt 勉強会 #7 @Tokyo株式会社 PTP さんのミーティングルームで開催しました。

今回もいつも通りもくもくと各自好きなことをやるスタイルで行いました。

もくもく:QtJubatus の Anomaly と Recommender 対応

オンライン機械学習向け分散処理フレームワーク Jubatus を Qt/Qml から使えるようにするラッパーライブラリ QtJubatusAnomalyRecommender 対応をしていました。

もう少し作業を進めてからコミットする予定です。

今日は 名古屋でも Qt 勉強会 が開かれていました。関西でも久々にやるって話を聞いたので楽しみですねー。2014 年も頑張って Qt の勉強しましょう!

Continue reading...

Qt 5 のミラーリポジトリを使用する

Published: 2014-01-22 / Last modified: 2014-01-22

Qt 5 のソースをリポジトリから取得してビルドする場合には Building Qt 5 from Git の手順どおりに行うのですが、公式リポジトリであるgit://gitorious.org/qt/qt5.git はとても遅いので、Githubqt-users.jp などのミラーリポジトリを使用するのがおすすめです。

github を使う場合以下のようにします。

$ git clone git@github.com:qtproject/qt5.git
$ cd qt5/
$ perl init-repository --mirror git://github.com/qtproject

qt-users.jp にあるミラーの場合は以下のようになります。

$ git clone git://git.qt-users.jp/qt/qt5.git
$ cd qt5/
$ perl init-repository --mirror git://git.qt-users.jp/

Continue reading...

まもなく Qt 5.3 の Feature Freeze です

Published: 2014-01-18 / Last modified: 2014-01-18

12月の中旬に Qt 5.2 がリリースされて1ヶ月ほどしか経過していませんが、Qt Releasing MLQt 5.3 Feature freeze is coming quite soon... という案内が流れてきました。

Qt 5.3 は今年の春のリリースを予定しているため、Feature Freeze は2月14日になります。開発期間は4ヶ月程度と短いですが、これには Qt 5 のリリース当初に計画していた春/秋の年2回のリリースサイクル化を実現するという目的があります。

現在までのところ Qt 5.3 の新機能の大きなものとしては WebSocket の対応(C++/QML)が提案されていて、QtNetwork の機能の一部となる方向で議論が進められています。

Continue reading...

Qt 勉強会 #6 @Tokyo 開催しました

Published: 2013-12-24 / Last modified: 2013-12-24

2013年12月21日(土曜日)に Qt 勉強会 #6 @Tokyo株式会社 PTP さんのミーティングルームで開催しました。

今回もいつも通りもくもくと各自好きなことをやるスタイルで行いました。

もくもく:qdbusviewer の改善

最近仕事で D-Bus を使うことが増えてきたので Qt に含まれている qdbusviewer というツールをよく使うのですが、このツールのログ出力ペインにクリア機能がなくて少し不便だったので、クリア機能をつけてみることにしました。

qdbusviewer.cpp を見ると、ログビューアは QTextBrowser というクラスを使用していました。その基底クラスである QTextEdit の contextMenuEvent のドキュメントにちょうど右クリックメニューに項目を追加するコードの例が載っていたので、それをそのまま採用して、add "Clear" to context menu of log viewer in qdbusviewer というパッチを作成しました。

パッチ的には 121 行も追加されたことになっていますが、80 行はライセンスヘッダですし QTextBrowser の派生クラスを作成するためだけのコードが少し多いだけで、実際の処理は以下のようにとてもシンプルです。

void LogViewer::contextMenuEvent(QContextMenuEvent *event)
{
    QMenu *menu = createStandardContextMenu();
    QAction *action = menu->addAction(tr("Clear"));
    connect(action, SIGNAL(triggered()), this, SLOT(clear()));
    menu->exec(event->globalPos());
    delete menu;
}

それからもう一つ、qdbusviewer を Ctrl+Q で終了させる「assign a shortcut key to the Quit action in qdbusviewer」というパッチも作成しました。

Continue reading...

Qt 5.2 リリース | 未だかつてなく Qt

Published: 2013-12-13 / Last modified: 2013-12-13

この記事は 2013年12月12日に Qt Blog に投稿された「Qt 5.2 Released | The Best Qt Yet」を 勝手に 日本語訳したものです。

Qt 5.2 を正式にリリースしました。今年7月にリリースした Qt 5.1 では Qt の Android 版と iOS 版を皆さんに紹介しました。この時期に開始した Qt の描画性能の向上に関する大幅な改善は既に完了しました。この6ヶ月は、Qt 5.2 の開発やリリース作業、特に Android 対応と iOS 対応に力を注ぎ込んできました。

モバイルは Qt にとって大きなチャンス

Qt 5.2 では Android、iOS、BlackBerry、Sailfish/Jolla、Ubuntu Mobile といったアプリ開発とマーケットに対応し、「Qt はモバイルに対応している」と胸を張って言うことができるようになりました。これまで対応してきたデスクトップアプリ開発、組み込み開発に加え、多くのモバイルプラットフォームの対応した Qt は、ネイティブのクロスプラットフォーム開発フレームワークの決定版と言えるでしょう。Qt 5.2 では、既存のデスクトップアプリや組み込み向けのアプリケーションを簡単にスマートフォンやタブレットで動かせるようになります。

モバイルも含めた完璧なクロスプラットフォーム対応を約束する証として、みなさんにプレゼントを用意しました。それは、Qt for WinRT のテクノロジープレビュー版です。このプレビュー版は開発ブランチをベースにしているため、Qt 5.3 に入る予定の新機能もいくつか含まれています。

Qt の Android 版と iOS 版

Android も iOS もほとんどの Qt の API は Qt 5.2 の時点でサポートされていました。しかし、新しいプラットフォームに対応するということで、いくつかの例外もあります。Qt WebKit は Android にはまだ対応できていません。iOS では App Store の制限により対応ができません。しかし、Qt の API を通じてウェブのコンテンツを簡単に組み込むための方法を現在開発中です。それまでの間はそれぞれのネイティブのやり方でウェブのコンテンツを扱うことを推奨します。Qt BluetoothQt NFC も未対応ですが、今後のリリースで対応していく予定です。

Continue reading...

Qt 勉強会 #5 @Tokyo 開催しました

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

2013年11月16日(土曜日)に Qt 勉強会 #5 @Tokyo株式会社 PTP さんのミーティングルームで開催しました。

今回もいつも通りもくもくと各自好きなことをやるスタイルで行いました。

今日の成果

数ヶ月前に送って放置していた Change I122f7970: QSqlQuery::isNull string overload のパッチが最新のソースだとコンフリクトするので対処しました。

それ以外はとくに書くような成果はありませんでしたが、色々な人の話を聞いたり質問に答えたり、悩みを共有したりととても有意義な勉強会でした。

Continue reading...