Qtで、下図のようにロボットを制御するためのカメラ画像を表示するGUIアプリケーションを作成してみた。
Qtには、Qt Multimediaというマルチメディアを扱うモジュールがある。今回は、Qt MultimediaのQCameraおよびQCameraViewfinderクラスを用いた。
http://doc.qt.io/qt-5/qtmultimedia-index.html
http://doc.qt.io/qt-5/qcameraviewfinder.html
手順を一応メモっておく。
1)Qt_creatorで,「CameraQT」という名前のDialogベースのプロジェクトを作成する。そして、下図のように「viewfinder」という名前のQWidgetオブジェクトを追加する。
2)オブジェクト「viewfinder」のクラスを、QWidgetからQCameraViewfinderに格上げする。
具体的には、viewfinderオブジェクトを右クリックして、「格上げ先」->「QCameraViewfinder」を選択する。
もし、格上げ先に、QCameraViewfinderが無ければ、「格上げ先を指定」を選択し、「格上げされたクラス名」に、「QCameraViewfinder」を入力して、「格上げ」をクリックする。
3)CameraQT.proに、multimediaモジュールを追加する。
具体的には、下記の行をCameraQT.proに追加する。
QT += multimedia multimediawidgets
4)dialog.hとdialog.cppを以下のように修正する。
【dialog.h】
#ifndef DIALOG_H #define DIALOG_H #include <QDialog> // headers for capturing camera image #include <QCamera> namespace Ui { class Dialog; } class Dialog : public QDialog { Q_OBJECT public: explicit Dialog(QWidget *parent = 0); ~Dialog(); private: Ui::Dialog *ui; QCamera *camera; // camera interface }; #endif // DIALOG_H
【dialog.cpp】
#include "dialog.h" #include "ui_dialog.h" Dialog::Dialog(QWidget *parent) : QDialog(parent), ui(new Ui::Dialog) { ui->setupUi(this); // set the viewfinder of camera and start to display image camera = new QCamera; camera->setViewfinder(ui->viewfinder); camera->start(); } Dialog::~Dialog() { delete ui; }
5)ビルドして実行する。
ちなみに、上記のプロジェクトファイル一式は、下記からダウンロードできる。
https://drive.google.com/open?id=0B3uB4w2FEJbIV0ppTWFyTTJabEU
以上のように、QtのMultimediaモジュールを用いると非常に簡単にカメラの画像を表示するGUIアプリケーションが作れる。しかも、クロスプラットフォームにも対応している。https://drive.google.com/open?id=0B3uB4w2FEJbIV0ppTWFyTTJabEU