Qt

コルーチンと Qt で遊んでみた

Published Saturday September 22nd, 2018 | Leave a comment
Posted in Qt | Tags:

この記事は The Qt Blog の Playing with coroutines and Qt を翻訳したものです。 執筆: Jesús Fernández, 2018年05月29日 みなさん、こんにちは! 最近 C++ でのコルーチンの状況が気になって、いくつかの実装を調べていました。そして これ で実験することにしました。 これはシンプルで簡単に使え、Linux と Windows で動作します。 当面の目標は、シグナルが来るのを待ったり、QCoreApplication::processEvents を呼んだり、QEventLoop をスタック上に作るようなことをせずとも非同期で動くコードを探るということです。 最初のアプローチは、カスタムのイベントディスパッチャーの中の processEvent 関数をコルーチンに変換し、yield を使うことでした。いくつか失敗をして、この方法はやめることにしました。 次の取り組みは、スロットをコルーチンにすることでした。 QTimer::singleShot(0, std::bind(&coroutine::resume, coroutine::create([]() { … }); このラムダ関数の中で、CPU は yield まで処理を実行し、アプリケーションのイベントループに飛びます。 実際のコードはこんな感じです。 #include “coroutine.h” #include <QtCore> #include <QtWidgets> int main(int argc, char **argv) […]

Read More

Qt for Python: 舞台裏

Published Saturday September 22nd, 2018 | Leave a comment
Posted in Qt for Python | Tags: , , ,

この記事は The Qt Blog の Qt for Python: under the hood を翻訳したものです。 執筆: Cristián, 2018年05月24日 本日は、「Qt for Python バインディング」の生成プロセスについて紹介したいと思います。 以下の図は The Qt Company が PySide2 モジュールを提供する際の一般的なプロセスを示しています。 PySide プロジェクトが 2009 年に立ち上がった際に当時のチームは Qt の C++ のヘッダファイルから Python のバインディングを生成するのに外部のツールを使用することを決断しました。 すべての Qt の C++ の機能に対応できるという条件は当然として、最終的なパッケージの大きさに強い感心がありました。 以前のものはテンプレートを多用していたため、別のものが必要になりました。 いくつかの選択肢を検討した結果、そのチームは自分たちで Shiboken と呼ばれるジェネレーターを書くことにしました。 Shiboken は(QtScriptGenerator という昔のプロジェクトを元に作られた)ApiExtractor というライブラリを使用し、Clang を用いて Qt のヘッダファイルをパースして Qt のクラスの情報を取得します。 このステップは […]

Read More

Qt 1.0 から 5.11 へのポーティングガイド

Published Thursday September 20th, 2018 | Leave a comment
Posted in Qt | Tags: , ,

この記事は The Qt Blog の Porting guide from Qt 1.0 to 5.11 を翻訳したものです。 執筆: Paul Olav Tvete, 2018年05月24日 Qt 5.11 がリリースされました。Qt 1.0 で書かれたアプリケーションをアップグレードする絶好の機会です ;-)。…という冗談はさておき 、今回は我々が最初の公式リリース以降の長い年月の間、いかに Qt の互換性を保ちつづけたのかを見てみたいと思います。 Qt は、ソースコードとバイナリの 互換性をマイナーリリース間で保証 していて、これは真剣に取り組んでいることの一つです。Qt のバージョンが上がった際にいちいち、アプリケーションの修正(や再コンパイル)を必要としないように非常に気を遣っています。しかし、時には Qt の改善にともなう大きな変更が必要な場合もあります。その場合は、メジャーリリースとして行います。1996年の Qt 1.0 のリリース以来(22年も前ですね)、2.0、3.0、4.0(この時はとても大変でしたね)、5.0 と4度ソースコードの互換性を破りました。 もちろん、メジャーリリースで互換性を破る場合でも影響を最小限に留めるよう努めてはいますが、変更は積み重なります。ここで「Qt 1.0 のアプリケーションを 5.11 で動かすのはどのくらい大変なんだろう?」という疑問が浮かび上がります。 この回答として、Qt 1.0 で提供していたチュートリアルのサンプルを題材にして、Qt 5 でコンパイルできるようにすることにしました。Qt のアーカイブは 1.41 までしか遡れないため、4つもの異なるソースコード管理システムに保存された古代の歴史から発掘する必要がありました。少しだけ脱線しましたが、そのサンプルの名前は t14 というもので、チュートリアルの最後、14番目のコードになります。 それでは実際に、これをビルドして実行するために必要なステップを紹介したいと思います。

Read More

Qt for WebAssembly – サンプルをチェック!

Published Wednesday September 19th, 2018 | Leave a comment
Posted in Qt for WebAssembly | Tags:

この記事は The Qt Blog の Qt for WebAssembly – check out the examples! を翻訳したものです。 執筆: Eskil Abrahamsen Blomfeldt, 2018年05月22日 WebAssembly は主要なウェブブラウザでサポートされており、ウェブページ上のサンドボックスで実行可能なバイナリ形式で、ネイティブのマシンコードとほぼ同等のスピードで動作します。Qt for WebAssembly は、ダウンロードの手間や(wasm ファイルの提供以外の)特殊なサーバーの設定なしにウェブブラウザ上で Qt アプリケーションを実行可能にする技術です。 実際に見ていただけるよう、いくつかのデモをコンパイルいたしました。パフォーマンスを体感したい場合は Firefox をご利用ください。 以下にデモと解説を羅列します。 http://example.qt.io/qt-webassembly/opengl/hellowindow/hellowindow.html Qt のロゴを OpenGL を利用して描画しています。このサンプルでは、任意の OpenGL のコードが実際に動くという事がお分かりいただけます。 http://example.qt.io/qt-webassembly/SensorTagDemo/SensorTagDemo.html 産業オートメーションに向けた比較的規模の大きいデモです。元々は Qt の WebSockets を利用してデータを受け取るデモですが、データはダミーで、単に綺麗な見た目を表示しています。 http://example.qt.io/qt-webassembly/quickcontrols2/gallery/gallery.html Qt Quick Controls 2 が提供するコントロールのギャラリーです。このデモでは、Qt Quick と Qt Quick Controls […]

Read More

Qt for WebAssembly

Published Wednesday September 19th, 2018 | Leave a comment
Posted in Qt for WebAssembly | Tags:

この記事は The Qt Blog の Qt for WebAssembly を翻訳したものです。 執筆: Lorn Potter, 2018年05月22日 Qt Project が Qt for WebAssembly テクノロジープレビューのベータ版をリリースしたニュースをご覧いただけましたでしょうか。 ウェブサーバーで配信した Qt をウェブブラウザ上で動かすために Emscripten を利用してコンパイルをしています。複数のプラットフォーム向けにコンパイルとデプロイをする代わりに、WebAssembly をサポートするすべてのブラウザむけのウェブサーバー向けにコンパイルとデプロイをするという発想です。これから事業を始める方で、様々なプラットフォームを持つ複数の顧客と仕事をする方は、Qt for WebAssembly で Qt もしくは Qt Quick のアプリをコンパイルすることで、デプロイを一度で済ませることが可能になります。 Qt for WebAssembly のビルド手順は Qt for WebAssembly の wiki ページ をご覧ください。まず初めに、emsdk compiler のダウンロードとセットアップが必要です。手順自体は極めて一般的です。これをクロスコンパイラとして利用します。 開発/デバッグ gdb が無いためデバッグは少々困難ですが、ブラウザのデバッガコンソールと同様に出力文が存在します(std::cout や qDebug()、printf)。Firefox では、about:config の “devtools.hud.loglimit.console” […]

Read More

Qt 5.12 アルファ版のリリース

Published Tuesday September 18th, 2018 | Leave a comment
Posted in Qt | Tags: , ,

この記事は The Qt Blog の Qt 5.12 Alpha Released を翻訳したものです。 執筆: Jani Heikkinen, 2018年09月18日 本日 Qt 5.12 のアルファ版をリリースいたしました。今回のアルファ版ではソースコードパッケージに加え、ビルド済みのバイナリも提供致します。 Qt 5.12 の新機能については こちらの wiki ページ をご覧ください。なお、この機能の一覧は現在も更新中で、最初のベータ版をリリースするまでは確定ではないことにご注意ください。 今回のアルファ版のリリースの直後よりベータ版のリリースに向けた作業を開始します。最初のベータ版は2、3週間後を予定しております。詳しいスケジュールは 5.12 の wiki ページ をご覧ください。 Qt 5.12 のアルファ版をぜひお試しください。ソースパッケージは Qt Account もしくは download.qt.io より、ビルド済みのバイナリは Qt Online Installer より入手可能です。 メーリングリストへの投稿や Jira へのバグ報告などを通して、様々なフィードバックをいただければと思っています。

Read More

QML コンパイラパイプラインの最適化

Published Tuesday September 18th, 2018 | Leave a comment
Posted in Qt | Tags: , , , , , ,

この記事は The Qt Blog の Optimizing the QML compiler pipeline を翻訳したものです。 執筆: Lars Knoll, 2018年05月22日 Qt QML は Qt Quick でユーザーインターフェースを構築する際のプログラミング言語である QML を実行するためのエンジンです。Qt QML 自体には描画機能に関する依存が一切ありません。このモジュールでは、QML 言語のサポートに加え、ECMAScript 5.1 に準拠した JavaScript のエンジンを提供しています。 Qt Quick というユーザーインターフェース技術の基礎を提供するこのモジュールは、Qt のユーザーに向けた核となるものです。内部的には主に2つの要素で構成されています。QML と ECMAScript をバイナリデータ構造とバイトコード/アセンブリにコンパイルするためのコンパイラパイプラインと、そこで生成されたコードを実行するためのランタイムです。今回の記事は前者についてのものになります。 5.10 まで利用していた Qt QML のコンパイラパイプラインはここ数年の Qt のアップデートでとても複雑になってしまいました。 以下の図は簡易化した以前のコンパイラパイプラインを示したものです。 まず QML と JavaScript のコードを 字句解析器(Lexer) と 構文解析器(Parser) に送り、抽象構文木(AST) というコンパイル用のコードに変換します。この […]

Read More

5.11 での QtKNX のアップデート

Published Tuesday September 18th, 2018 | Leave a comment
Posted in Qt for Automation | Tags: , ,

この記事は The Qt Blog の QtKNX updates for 5.11 を翻訳したものです。 執筆: Andrew O’Doherty, 2018年05月18日 以前 KNX の対応 についてお知らせをして以降しばらく間が空いてしまいましたが、5.11 のリリースに合わせてアップデートを行う QtKNX の内容を簡単に紹介したいと思います。 API の改善 今回のアップデートの焦点の一つは Qt KNX のオブジェクトの走査と構築をより直感的に改善することでした。KNXnet/IP フレームで必要となる数多くの仕様に対応するために、プロキシパターンを導入しました。例えば、KNXnet/IP の接続要求のフレームで実行される情報は QKnxNetIpConnectRequestProxy クラスを利用して得ることができます。

Read More

Qt の MQTT でデバイス間通信の最適化

Published Tuesday September 18th, 2018 | Leave a comment
Posted in Qt for Automation | Tags: ,

この記事は The Qt Blog の Optimizing Device Communication with Qt MQTT を翻訳したものです。 執筆: Maurice Kalinowski, 2018年05月16日 Qt for Automation は Qt for Application Development や Qt for Device Creation 向けのアドオンとして、Qt 5.10 に合わせてリリース致しました。これに含まれる Qt MQTT と呼ばれるモジュールが、クライアントサイドの MQTT のソリューションです。 Qt MQTT はクライアント用で、開発者が MQTT で送るデータを管理するセンサーデバイスやゲートウエイを開発する際に利用されます。MQTT はそれ自身が軽量で、オープンで、シンプルだとうたっています。プロトコル的にオーバーヘッドを限りなく減らすというのが基本的な思想です。もっとも採用されているバージョンは MQTT 3.1.1 で、これはよく MQTT 4 と呼ばれています。MQTT 5 は最近標準化がなされ、Qt MQTT でもその対応を進めています。これについては今年の後半に別途お知らせ致します。 このモジュールの機能の確認と、開発者への利用のガイドラインを作成するために、The Qt […]

Read More

Qt 5.11 の OPC UA 対応

Published Saturday September 8th, 2018 | Leave a comment
Posted in Qt for Automation | Tags: ,

この記事は The Qt Blog の OPC UA support in Qt 5.11 を翻訳したものです。 執筆: Frank Meerkötter, 2018年05月16日 OPC UA はインダストリー 4.0 の中心となる要素で IT と産業製品のシステムのシームレスなコミュニケーションを提供します。Qt の OPC UA 対応は簡単に使える OPC UA 用の Qt の API を提供することを目的に basysKom が 2015 年に開始したものです。2017 年には The Qt Company も協力し、テクノロジープレビューが完成しました。五月下旬にリリースされる Qt 5.11 で利用可能になる予定です。 Qt OPC UA の目標は、HMI やアプリケーション開発におけるクライアント側の実装を簡単にするというものです。テクノロジープレビュー版では OPC UA スタンダードのサブセットの実装を行いました。これにより、サーバーへ接続し、属性の読み書き、サーバー側のメソッドの実行、データの変更のモニタリングやノードの監視などが可能になりました。すべての機能は非同期な API […]

Read More
Get started today with Qt Download now