個人情報保護方針 お支払いについて お問い合わせ

Qt5によるLinux GUI プログラミング


Windowsでは早い時期にWPFやC#といった方法で比較的簡単にユーザーがデスクトップアプリケーションを視覚的につくることが可能でした。ところがLinuxでGUIアプリケーションを簡単につくることができるようになってきたのはQt5/QtDesignerが登場してからになります。ずっと以前にQt4を用いてGUIアプリケーションを作ろうとして断念したことがあります。Qt5/QtDesignerはWPFに似たようなところがあり、QtDesignerではGUIを用いて視覚的にウインドウ上にコンボボックスやテキストボックス、ボタンなどを配置することができます。またウインドウ上のアイテムが操作された時にイベントが発生し、関数が呼ばれる仕組みもWPFとよく似ています。しかし、Qt5はC++ベースであり、C#ではありません。この点は従来のC/C++になじんだソフトウェア設計者には朗報です。Cでよく使われるmalloc等の関数も使えますし、ライブラリの呼び出しにも特別な工夫は必要ありません。 一方でツールの安定性や応答性という点ではQt DesignerはVisual Studioには遠く及びません。編集中に表示がおかしことも多々あります。しかし、LinuxでもGUIでアプリケーションを設計できる環境が提供されたということは大いに評価すべきことだと考えます。

Linuxのディストリビューション、バージョンと開発環境

現在現役のWindowsは10/11で、32bit/64bitぐらいの違いしかありません。64bitアプリケーションは32bitWindowsでは使えませんが、おおむねWindows7/8時代のアプリケーションもほとんど動作します。ところがLinuxではそうはいきません。LinuxはRedhat/Debian/CentOS/Ubunthなど多くの種類があり、コマンドや操作方法デスクトップ画面のレイアウトや操作方法もいろいろです。異なるディストリビューションでもOSのカーネルは同じだったりしますが、バイナリレベルで同じものが動くとは限りません。Linuxのソフトウェアは通常レポジトリと呼ばれるサーバーからそのディストリビューション、そのバージョンに応じたものがダウンロードされる仕組みになっています。つまり使用したいソフトウェアがそのディストリビューション、そのバージョンでサポートされていなければ使用できません。たとえばQt5をQt5ができる前のバージョンのLinuxで使うことはできないのです。
したがって、Qt5を用いたアプリケーションは特定のOSのディストリビューションとバージョンに限って対応することになります。バージョンが異なるLinuxでコンパイルしたものは動かないことも多々あります。お客様が使用したいLinuxがある場合には、そのLinuxでの開発環境を用意させていただくことになると思いますが、まずは標準としてRaspberryPiと親和性の高い Ubunth20.04とRaspberry pi OS(bullseye)を中心にサポートしていきたいと考えています。

 



libusbを用いたUSBデバイスへのアクセス

プライムシステムズ社からはLinuxのCUIプログラム用として、libusbを用いたUSB2.0 (Smart-USB Plus)用のSUPサンプルとUSB3.0 (Smart-USB Sigma)用のSUSサンプルを無償提供しています。Raspberry Pi OSにて動作確認済みのようです。SUPサンプルはlibusb1.0用、SUSサンプルはlibusb0.1用となっています。Linuxで使用されているlibusbのバージョンは長い間0.1でしたが、最近はlibusb1.0がインストールされいてるようです。Ubunth20.04には1.0がインストールされていますのでlibusb1.0を使用することにしました。libusb0.1とlibusb1.0には互換性がありません。
libusbを使うとUSBデバイスの検索、オープンと、コントロール転送、バルク転送などを行うことができます。これをWindowsのSUP/SUS APIと同じ関数名、同じ機能の関数を用意することでWindowsのC#/WPFで行った処理と同様の処理ができるようにしました。ただしQt5で使用できるように引数はQString等のQtのクラスで定義します。これらの作業によって、USB経由でプライムシステムズ社製FPGAボードにアクセスするGUIアプリを作成することができるようになりました。


プライムシステムズ社でWindows版を無償提供しているリファレンスソフトウェアRefApp7と同等のアプリケーションを作成してみました。このアプリケーションが動作するということは基本的に同社のFPGAとの通信が可能ということになります。まだ基本的なボタンやコンボボックスしかできていませんが、徐々にWPFアプリでできることがQt5でできるようにしていきます。

Raspberry Pi

LinuxのGUIアプリが作成できるということはRaspberry Piや類似した小型組み込みボードでスタンドアロンの液晶やタッチパネルをもちいたGUIのシステムができるということになります。RaspberryPiの40ピンのGPIOで接続される各種I/Oボードだけでなく、プライムシステムズ社製のFPGAボードをUSB経由で接続するほか、新しく発売されるCM4MBシステム開発ボードで、FPGAとLinuxをPCIe接続した小型スタンドアロンシステムを構築することも可能になります。これまで、WindowsCEやWindows Embedded等のシステムも納入してきましたが、Linuxで同様のことができればOSのライセンス料も不要になりより安価でシステムが構築できそうです。