【保存版】AWSでQtアプリを自動テスト!Squishでカンタンに始める方法を徹底解説
1月 24, 2025 by Mikio Hirai | Comments
こんにちは、Qt Japanの平井です。
本日は、AWSのEC2上で動作しているQtアプリを、GUIテスト自動化ツールのSquishを使って自動テストする手順について、ステップバイステップでご紹介したいと思います。
クラウド上で開発からテストまでを完結させることで、オンプレミスのハードウェアに依存することなく、より効率的かつスケーラブルにアプリを開発・検証することが可能になります。
この記事では、EC2インスタンスの準備からSquishの設定方法、実際のテスト作成と実行手順までを丁寧に解説していきますので、クラウドでのGUIテストに興味のある方はぜひ参考にしてみてください。
※こちらの手順を実施するには、商用版 Qt for Device Creation および商用版 Squish のライセンスが必要です。
ライセンスが必要な場合は、Qt Japan (japan@qt.io) までお気軽にご連絡ください。
環境
- Windows 11ホスト
- Ubuntu 22.04.5 64bit (VM Wareで実行)
- Qt 6.7.0
- Boot to Qt AWS EC2 ARM64
- Squish 8.1.0 Qt 6.7.x MinGW GCC112 Posix
今回のセットアップ概要
本記事では、Qt for Cloudを利用して、AWSのEC2インスタンスにQtのサンプルアプリをデプロイします。その後、WindowsローカルマシンにインストールしたSquishからリモートでテストを実行する流れを解説します。
このように、クラウド環境でアプリを動かしながら、ローカルのテストツールで操作・検証を行うことで、開発とテストを柔軟かつ効率的に進めることができます。
手順1 EC2の起動
まずは、AWSでEC2を起動します。(公式ドキュメントでの手順はこちら)
EC2(Amazon Elastic Compute Cloud)とは?
EC2とは、Amazon Web Services(AWS)が提供しているクラウド上の仮想サーバーサービスです。物理的なサーバーを用意する代わりに、AWSの管理画面から数クリックでサーバーを起動したり停止したりできます。利用する時間や規模に応じて料金が発生する「従量課金制」のため、必要なときだけ使うことができ、コストを抑えやすいのが特徴です。
たとえば、実際にハードウェアを準備しなくても、EC2を立ち上げるだけで、自分専用のサーバー環境を手軽に用意できます。そのため、開発やテストはもちろん、本番運用にも広く利用されています。
AWSのコンソールを開き、左上のメニューをクリックします。
表示されたメニューから、EC2を選択します。
次に、Launch instanceを選択します。
Name and tagsで任意の名前を設定します。
私は、My Qt Cloudとしました。
次に、Application and OS Images (Amazon Machine Image)から、Browse more AMIsを選択します。
Selected AMIの検索バーでqtと検索すると、AWS Marketplace AMIsにBoot to Qt 6.7が表示されるので、Selectを選択します。
以下のダイアログが表示されるので、Subscribe nowを選択します。
Instance typeは、今回はg5g.xlargeを選択します。
Key pair(login)では、Create new key pairを選択します。
以下のダイアログでは、Key pair nameに任意の名前を入力し、Create key pairを選択します。
すると、自動的に秘密鍵のファイルがダウンロードされます。これは大切に保管してください。
Key pair name - requiredに今作成したkey pairが設定されていることを確認したら、Launch instanceでEC2を起動します。
Launchに成功したら、以下のようにページ上部に緑色の帯とメッセージが表示されます。
右下のView all instancesを押下してインスタンスを確認できます。
以下のように、今LaunchしたインスタンスがRunningであることが確認できます。
では、起動したEC2インスタンスにアクセスしてみましょう。
ローカルのWindowsマシンで、コマンドプロンプトを立ち上げます。
コマンドプロンプトで、以下のコマンドを実行してEC2インスタンスに接続します。
ssh -i "<秘密鍵ファイルへのパス/秘密鍵ファイル名>.pem" user@<EC2の公開IPアドレス>
EC2インスタンスのIPアドレスは、以下に記述があります。
私の場合は、以下のようなコマンドになります。
ssh -i "C:\Qt\AWS Key Pair\Key pair for blog.pem" user@18.183.67.94
上記のコマンド実行時に、以下のようなエラーが出ることがあると思います。
Bad permissions. Try removing permissions for user: BUILTIN\\Users (S-1-5-32-545) on file C:/Qt/AWS Key Pair/Key pair for blog.pem.
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
@ WARNING: UNPROTECTED PRIVATE KEY FILE! @
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
Permissions for 'C:\\Qt\\AWS Key Pair\\Key pair for blog.pem' are too open.
It is required that your private key files are NOT accessible by others.
This private key will be ignored.
Load key "C:\\Qt\\AWS Key Pair\\Key pair for blog.pem": bad permissions
user@18.183.67.94: Permission denied (publickey).
不適切なアクセス権のエラーを解消する手順
- .pemファイルを右クリックし、「プロパティを選択します。
- 表示されたウィンドウの**「セキュリティ」タブを開き、右下の「詳細設定」**ボタンをクリックします。
- 下部にある**「継承の無効化」**をクリックするとダイアログが表示されるので、**「継承されたアクセス許可をこのオブジェクトの明示的なアクセス許可に変換します」を選択します。
- その後、右下の「適用」をクリックしてから「OK」**で画面を閉じてください。
- 再度、.pemファイルの**「プロパティ」** → **「セキュリティ」タブに戻り、今度は「編集」**ボタンをクリックします。
- **「追加」から自分のユーザーを新規登録し、「フルコントロール」**を付与します。
- それ以外のユーザー(例:Authenticated Users, SYSTEM, Administrators, Usersなど)はすべて削除します。
- 最後に、「適用」 → **「OK」**と進んで設定を保存し、ウィンドウを閉じます。
これで、.pemファイルに不適切なアクセス権が付与されている状態が修正され、SSHでの接続エラーが解消されます。
問題を解決したうえで再度同じコマンドを実行すると、以下のようにEC2インスタンスに接続することができます。
QtアプリのEC2へのデプロイ
ここまで、Qt環境が有効になっているEC2インスタンスの起動と、そこへの接続方法を見てきました。
次に、ローカルのWindowsマシンでQtアプリをEC2向けにビルドして、デプロイする方法をご紹介します。
まず、QtのインストールフォルダにあるMaintenanceTool.exeを起動します。Qtのインストールは、Qtのアカウントページから行えます。
MaintenanceToolでは、Boot to Qt Software Stack 6.7.0の下にあるAWS EC2 ARM64を選択します。
さらに、Qt 6.7.0の下にあるMinGW 11.2.0 64-bitも選択し、右下の次へを押下してインストールに進みます。インストールが完了したら、MaintenanceToolを閉じましょう。
次に、Qt Creatorを開きます。Qt Creatorは、<Qtインストールフォルダ>/Tools/QtCreator/bin/qtcreator.exeから起動できます。
Qt Creatorが開いたら、ようこそからサンプルを選択し、Qtバージョンは6.7.0を選択します。そして、Calqlatrサンプルをダブルクリックします。Kitは、Boot2Qt 6.7.0 AWS EC2 ARM64を選択します。
プロジェクトが開けたところで、次はEC2インスタンスの登録を行います。編集からPreferences...を選択します。
左のカラムからデバイスを選択し、デバイスタブで追加を選択します。
使用可能なデバイスタイプからBoot to Qt Deviceを選択し、ウィザード開始を押下します。
デバイス名に任意のデバイス名を設定し、EC2インスタンスのIPアドレスをDevice addressに設定します。その後、右下の完了を押下します。この時点で、デバイステストに失敗しましたというメッセージの入ったダイアログが表示されるかもしれませんが、こちらは閉じるで閉じます。
認証方法は特定のキーを選択します。ユーザー名はuserに変更し、秘密鍵ファイルには先ほどダウンロードされた秘密鍵を設定します。その後、適用を押下して変更を適用した後に、デバイステストのためにテストを押下します。
新しいダイアログが開いてデバイステストが行われます。最後にデバイステストが成功しました。と表示されれば成功です。閉じるを押下してダイアログを閉じましょう。
では実際にCalqlatrアプリをビルドしてデプロイしていきます。
以下のように、緑色の矢印ボタンの上をクリックし、Boot2Qt 6.7.0 AWS EC2 AWS64 > Debug > Deploy to Boot to Qt targetが選択されており、かつ上側のRun deviceが先ほど作成したデバイスになっていることを確認してから、実際に緑色の矢印ボタンを押下してアプリケーションのビルドとデプロイを行います。
すると、コンパイル出力タブに以下のようなデプロイエラーが表示されると思います。
Boot to QtのEC2はユーザーがルート権限を持っていないので、mkdir /usr/examplesがPermission deniedとなり失敗しています。
これを解消するには、編集からCMakeLists.txtを開き、install()コマンドの内容を以下のように変更します。ここでは、インストール先のディレクトリをuserでも編集可能なものに設定しています。
install(TARGETS calqlatrexample
BUNDLE DESTINATION /home/user/examples # バンドル(アプリごと)を /usr/examples に
RUNTIME DESTINATION /home/user/examples # 実行ファイル(calqlatrexample)を /usr/examples に
LIBRARY DESTINATION /home/user/examples # (動的)ライブラリをインストールする場合も同様
)
ここまで完了したら、再度矢印ボタンを押下してデプロイしてみましょう。特にエラーが出なければ成功です。
もしエラーが出た場合は、左のカラムのプロジェクトからBoot2Qt 6.7.0 AWS EC2 ARM64の実行を確認し、デプロイするファイルのTarget Directoryが/home/user/examplesとなっていることを確認してください。
もしそうなっていない場合は、Override deployment data from build systemをチェックすると、問題が解消することがあります。
では次に、実際にデプロイしたアプリケーションを起動してみましょう。
アプリケーションは、GPUを使用する形で起動する方法と、GPUなしで起動する方法があります。Qt 6.7.0現在、GPUを使用する方法で起動する場合はQMLのソースコードを数行だけ修正する必要があるので、今回はGPUなしで起動する方法を試します。
まず、EC2に接続した状態のコマンドプロンプトで先ほどアプリケーションをデプロイしたディレクトリに移動します。
次に、以下のコマンドを実行してアプリを起動します。-platform vncとつけることで、vncサーバーとしてアプリケーションを起動しています。こうすることで、ローカルのWindows PCでVNCクライアントを使用して、アプリケーションを確認、操作することができるようになります。
./calqlatrexample -platform vnc
早速、サードパーティーのVNCクライアントアプリを使用してアプリが動作しているかを確認しましょう。私は、RealVNCのVNC Viewerを使用します。
早速IPアドレスとポート番号を入力して、Connect to address or hostnameをクリックして接続を試みます。※私は一度EC2インスタンスを起動しなおしたため、IPアドレスが先ほどのものと変わっています。ここでは、ご自身のEC2インスタンスの公開IPアドレスをご利用ください。
しかし、おそらくこの方法だと、Timed out waiting for a response from the computerというエラーダイアログが表示されることと思います。
この問題を解決するには、Qtの公式ドキュメントにあるように、以下のコマンドを実行してSSHトンネルを開く必要があります。
ssh -i <ami-key.pem> -L 5900:localhost:5900 user@ec2-<ami-ip-address>.compute-1.amazonaws.com
私の環境では、以下のようなコマンドになります。
ssh -i "C:\Qt\AWS Key Pair\Key pair for blog.pem" -L 5900:localhost:5900 user@35.78.175.183
もしコマンド実行時に以下のようにPermission deniedと表示された場合は、
以下のコマンドを実行するとローカルの5900ポートを使用しているプロセスのIDが表示されるので、それをTask Managerで検索し、ターミネートすることで解決します。
netstat -ano | findstr :5900
では、SSHトンネルが開いたところで、VNC Viewerを使用して改めてアプリを表示してみましょう。
その前に注意が必要です。私の環境では、EC2インスタンスのコンソールで一旦Ctrl + Cでアプリを止めてから再起動しないと、VNC Viewerからアプリにアクセスできませんでした。
以下のようにVNC Viewerを開き、127.0.0.1:5900もしくは、localhostにアクセスします。EC2インスタンスで実行されているアプリ画面が開き、操作することができるようになりました。
EC2インスタンス上のQtアプリをSquishで自動テストする
ここでは、クラウド上(EC2インスタンス)で動作しているQtアプリを、GUIテスト自動化ツール「Squish」を使ってリモートからテストする方法をご紹介します。
Squishは、テストを実行するPC上のアプリだけでなく、別デバイス(EC2インスタンスなど)で動作するアプリを遠隔操作してテストすることも可能です。
このリモートテストを行うには、リモート側で動作させる「Squish Server」というバイナリをビルドして実行しておく必要があります。ローカルPCのSquishツールは、このSquish Serverに接続し、リモート上のアプリを操作・検証することでテストを実施します。
Squishではオプション(アドオン)として、リモートテスト用の「Squish Server」ソースコードを提供しています。
このソースをEC2インスタンスで動作するようにビルドし、リモートテストを行えるようにします。
このソースコードのビルドは Linux ホスト上で行います。
ここでは、VMware 上で動作する Ubuntu 22.04.5(64ビット版)を使用します。
このUbuntuには、先程Windowsにインストールしたものと同じQtがインストールされています。
Squish Server のビルドには、事前に Squish 本体をインストールしておく必要があります。
以下のリンク先から Squish をダウンロードしましょう:
https://account.qt.io/s/downloads
リンクを開いてログインをしたら、左のカラムからAll Downloadsを選択します。
下にスクロールしてProductsの欄が見えたら、ドロップダウンメニューでProductをSquishに、Versionを8.1.0に、Host OSをLinuxに、Squish EditionsをQtに設定します。
リストの中からSquish for Qt (Binary for Linux 64 Bit, Qt 6.7.x)を見つけ、リンクからインストーラーをダウンロードします。インストーラーがダウンロードされたら実際に実行してインストールを完了しましょう。インストール先のフォルダは任意です。
私は、以下のフォルダを作成してそこにインストールしました。
続いて、Squish Server のソースコードを入手します。
このソースコードは、Squish のアドオンを購入されたお客様に対して、Qt Japan から個別に配布されます。
.tar.gzを解凍し(私は~/QA/Squish/squish-8.1.0-qt-embedded-srcに解凍しました)、ターミナルを開きます。Squish Serverのソースコードはconfigureツールが付属しています。こちらのツールに適切なパラメータを渡して実行することで、ビルド前の設定を行うことができます。
実行すべきコマンドは以下です。
./configure --with-qmake=/home/mikio/Qt/6.7.0/Boot2Qt/aws-ec2-arm64/toolchain/sysroots/x86_64-pokysdk-linux/usr/bin/qmake --enable-qmake-config --with-squishidl=/home/mikio/QA/Squish/Squish_8.1_for_Qt_6.7.x/squish-for-qt-8.1.0/bin/squishidl --disable-all --enable-qt --enable-server
注意すべきは、--with-qmakeと--with-squishidlパラメータです。こちらはそれぞれ、ご自身のQtインストールフォルダのパスと、Squishインストールフォルダのパスから値を指定する必要があります。
このコマンドを以下のように実行します。
configureが成功すると、以下のようにDone with configuring. Full log in config.log. Now type './build'.と出力されるので、./buildを実行します。
ビルドが成功すると、Build successful.というメッセージが表示されます。
ビルド成果物は同じフォルダに生成されるので、それらを.tar.xzファイルとして纏めます。
そして、scpコマンドでEC2インスタンスの/home/user/フォルダに送信します。この時、Ubuntuには秘密鍵ファイル(Key pair for blog.pem)が必要となりますので、Windowsホストからコピーして使用してください。
sudo scp -i "/home/mikio/Qt/AWS_Key_Pair/Key pair for blog.pem" ./squish_server_8.1_b2qt_aws_6.7.0.tar.xz user@35.78.175.183:/home/user/
EC2インスタンス側で確認すると、確かに送信ができていることが分かります。
tar -xfを実行してファイルを解凍します。私の場合は解凍したファイル群がカレントディレクトリに展開されたのでだいぶ散らかってしまいましたが、squishserverのようなフォルダを作成してそこに展開したほうが後々は使いやすいと思います。
次に、Squish serverに対してAUT(Application Under Test)を登録します。AUTとは、テスト対象のアプリケーションを指します。
以下のコマンドを実行することで登録が可能です。
./squishserver --config addAUT calqlatrexample /home/user/examples/
準備が整ったので、Squish Serverを実行します。Squish Serverが実行されると、デフォルトでポート4322を聞きます。こちらに後述するSquishツールからアクセスすることで、EC2インスタンスで実行されているアプリケーションに対してテストの実施が可能になります。
VNCクライアントを接続したときと同様に、今回もEC2インスタンスのポート4322に対してSSHトンネルを開きます。
ssh -i "C:\Qt\AWS Key Pair\Key pair for blog.pem" -L 4322:localhost:4322 user@35.78.175.183
次に、Windowsホストで(LinuxでもOK)Squish IDEを開きます。
Windowsにも、先程Ubuntuに行ったのと同様の手順でSquishをインストールできます。
Squish IDEは、<Squishインストールフォルダ>/bin/squishide.exeを起動することで起動可能です。
Squish IDEが開いたら、File > New Test Suite...を選択します。
そうすると、Test Suite(複数のテストケースをまとめたもの)を作成するためのダイアログが表示されます。
Test Suite Nameに任意の名前を設定し、Test Suite folder's parent folderにはTest Suiteが配置される任意のフォルダを指定します。
今回はQtフレームワークで実装されたアプリをテストするため、ToolkitはQtを選択します。
Scripting LanguageにはPythonを指定します。これはテストスクリプトを記述するスクリプト言語です。どのスクリプト言語を指定しても結構ですが、大体の方がPythonを使用しているようです。
ここまで完了したら、Finishを押下します。
Test Suiteが作成できたので、Test Casesのバーにある黒い下向きの矢印を選択し、New Script Test Caseを選択します。New BDD Test Caseを選択すると、日本語をはじめとした自然言語でのテストケース記述が可能ですが、今回はEC2インスタンスでのテスト実施なので、New Script Test Caseを選択します。
すると、tst_case1ファイルが生成されます。デフォルトの内容は、先程指定したPythonで記述されています。
ここで、まずアプリの起動確認を行いましょう。これによって、Squish Serverにcalqlatrexampleアプリが正常に登録されていて、かつローカルマシンのSquish IDEから起動可能かを確認できます。
Squish IDE上部のバーにあるAUT起動ボタンを押下するとLaunch Settingsが表示されるので、AUTの名前と引数を指定します。今回はAUT名をcalqlatrexample、引数に-platform vncを指定しています。-platform vncを使用する方法は描画にCPUを使用します。GPUを使用する場合の手順は、こちらのQt公式ドキュメントをご覧ください。
上記の設定をしたうえでLaunch SettingsのOKボタンを押下すると、アプリが起動します。
先程と同じように、VNC Viewerで起動したアプリを確認しましょう。(この時点で既にSquish意外からアプリを起動している場合は、EC2インスタンスからそちらの起動アプリをCtrl + Cで停止しましょう。)
起動確認が出来たら、AUTの停止ボタンを押下してアプリを止めます。
では次に、Squishによるテストスクリプトの自動生成を行ってみましょう。
Squishでは、起動したAUTに行った操作や検証の内容から、テストスクリプトを自動生成することができます。
まず、テストケースファイルの右側にある赤いレコーディングボタンを押下します。
Record Settingsが表示されるので、ApplicationとArgumentsに先ほどと同じ値を設定して、OKを押下します。
VNC Viewerを使用して起動したアプリケーションを確認します。右側には、SquishのControl Barが表示されます。こちらを使用して、検証ポイントの挿入などを行います。
VNC Viwerからアプリケーションを操作すると、Control Barに操作内容のログが表示されます。これは、操作をSquishがレコーディングしているということです。
ここまでで入力を行ったので、検証を行います。
検証では、AUTに対して行った入力の結果としてのアプリケーションの変化を検証することで、アプリケーションが期待通りに動作しているかを確認するステップです。
Control BarのVerifyの横にある黒い矢印を選択すると、Squishで利用可能な検証方法の一覧がドロップダウンメニューで表示されます。
今回は、GUIコンポーネントのプロパティの値を期待値と比較をする、Propertiesを選択します。
Propertiesを選択すると、Squish IDEの画面が表示されます。
検証したいプロパティを持つオブジェクトを指定しるために、緑色のPickボタンを押下します。
今回は、電卓が表示した15という数値が本当に期待通り15となっているかを検証するために、15という数値を表示しているオブジェクトをクリックします。
すると、再度Squish IDEが表示されます。
画面下のApplication Objectsタブには、今選択したオブジェクトが表示されます。
右側のPropertiesタブにはこのオブジェクトのプロパティ一覧と、その現在の値が表示されるので、今回はtextプロパティを選択します。
選択すると、画面上に期待値を15とする検証ポイントが挿入されるので、期待値が15で問題なければSave and Insert Varificationを押下しで検証ポイントの挿入を完了します。
検証ポイントは、1つのテストで任意の個数挿入することができます。
次はさらに操作を行ったうえで、再度検証点を挿入します。今回は画像を使って検証を行う、Screenshotを選択します。
Screenshotの検証ポイントを挿入する場合は、Squish IDEの画面に戻った後に、Application Objectsタブにある一番上のオブジェクトのチェックボックスを選択します。
すると、AUTの画面全体の現在のスクリーンショットが期待値として表示されるので、Save and Insert Verificationsを押下して確定します。スクリーンショットの検証では、画像の一部のみを検証に使用したり、比較時の一致率の閾値なども設定可能です。詳細は公式のSquishドキュメントをご覧ください。
今回はこの時点でテストケースのレコーディングを終了するので、Control BarのStop Recordingでレコーディングを終了します。
これによりAUTが停止され、ここまでの操作と検証ポイントがPythonスクリプトとして生成されました。
生成されたテストケースは、通常リファクタリングをして堅牢なテストケースとして保守を行っていきます。
しかし、リファクタリングをしなくても、生成されたテストスクリプトはそのまま実行可能です。
Squish IDEからテストを実行するには、緑色の再生ボタンを押下します。
これは必須ではありませんが、実行されている様子を確認したい場合は、VNC Viewerを起動すれば、Squishが自動で入力を行い、結果を検証するところを確認することもできます。
テストが終了すると、Squish IDEの下部に結果が表示されます。緑色の表示は、検証がすべてPassしたことを意味しています。
ここまで、ローカルのSquish IDEからAWS EC2上で動作するアプリケーションへ直接テストケースを実行する方法を紹介しました。SquishのテストはJenkinsなどのCIツールとも連携できるので、バージョン管理システム(Gitなど)とあわせて運用すれば、より効率的にテストを回せるようになります。
さらに、AWS EC2向けに作成したSquishのテストスクリプトは、そのまま実機でのテストにも流用できます。クラウド上で自動テストを行うのは開発効率と品質を高めるうえで有利ですが、最終的に実機でテストを行う場合でも、QtアプリとSquishのテストケースを変えずに利用できるため、スムーズに実機テストへ移行できるのも大きなメリットです。
おわりに
ここまでご覧いただき、ありがとうございました。今回は AWS EC2 上で動作している Qtアプリケーションを、 GUIテスト自動化ツール「Squish」 を使ってリモートからテストする手順をご紹介しました。
- EC2インスタンスの起動・設定
- Qtアプリのビルドとデプロイ
- Squish Serverのビルドと登録
- Squish IDEからのテスト作成・実行
これらを通じて、クラウド上での開発・テストをスムーズに行う具体的な方法をご理解いただけたかと思います。オンプレミス環境に比べ、必要なときに必要なだけリソースを使えることに加え、ネットワークを経由した遠隔操作でテストを行えるため、開発効率の向上とコスト削減の両面で大きなメリットがあります。
また、今回EC2向けに作成したSquishテストは、同じQtアプリを実機でテストする際にも流用できる点も大きな魅力です。クラウドで実行・検証しながら、最終的には実機テストへ移行する、というフレキシブルなワークフローが可能になります。
もし 商用版 Qt for Device Creation および商用版 Squish のライセンスについてご不明な点がありましたら、遠慮なく Qt Japan (japan@qt.io) までお問い合わせください。今後も引き続き、QtとSquishを組み合わせたさまざまな活用方法をご紹介していきますので、ぜひご期待いただければ幸いです。
今後の開発・運用に少しでもお役立ていただければ幸いです。それでは、最後までお読みいただきありがとうございました。
Blog Topics:
Comments
Subscribe to our newsletter
Subscribe Newsletter
Try Qt 6.8 Now!
Download the latest release here: www.qt.io/download.
Qt 6.8 release focuses on technology trends like spatial computing & XR, complex data visualization in 2D & 3D, and ARM-based development for desktop.
We're Hiring
Check out all our open positions here and follow us on Instagram to see what it's like to be #QtPeople.