QtDay 18

QtSerialPortをいじってみる

More than 3 years have passed since last update.

こんにちは。この記事はQt Advent Calendar 18日目となります。


QtSerialPort


QtSerialPortとは

QtSerialPortとは、その名の通りQtでシリアルポートを動かすためのクラスです。たとえば、


  • ロボットの操作インターフェイスをQtで作りたい

  • 組み込みシステムを作りたい

といった時に必要となるシリアルポートの操作が可能となります。

QtSerialPortには二つのクラスがあります。


QSerialPort

QSerialPortとはQtSerialPortの基盤となるクラスであり、またシリアルポートへの基本的なアクセスができます。Qt5.1から使用可能となりました。

QSerialPort Class | QtSerialPort 5.3


QSerialPortInfo

QSerialPortInfoクラスではシステムにおいて利用できるシリアルポートの情報を取得することができます。Qt5.1から使用可能となりました。

QSerialPortInfo Class | QtSerialPort 5.3

QtSerialPortはQIODeviceを継承して作られているため、QIODeviceの関数である.writeや.read()なども使用することができます。


使い方

QtSerialPortを利用する際は、プロジェクトファイルに次のように追記します


.pro

//Qt4の場合

CONFIG += serialport //これは.proファイルの一行目もしくは二行目に
//Qt5の場合
QT += serialport

また、次の二つのヘッダーを読み込みます。

#include <QtSerialPort/QSerialPort>

#include <QtSerialPort/QSerialPortInfo>


対応OS

OS
サポート状況

Windows

GNU/Linux

MAC OSX

他にもWindowsCEとかでも使えるみたいです。凄いなぁ...


簡単なサンプル

#include <QtCore/QCoreApplication>

#include <QtCore/QDebug>

#include <QtSerialPort/QSerialPort>
#include <QtSerialPort/QSerialPortInfo>

QT_USE_NAMESPACE

int main(int argc, char *argv[])
{
QCoreApplication a(argc, argv);

// Example use QSerialPortInfo
foreach (const QSerialPortInfo &info, QSerialPortInfo::availablePorts()) { //availablePorts()で利用可能なすべてのシリアルポートが取得できる
qDebug() << "Name : " << info.portName();
qDebug() << "Description : " << info.description();
qDebug() << "Manufacturer: " << info.manufacturer();

// Example use QSerialPort
QSerialPort serial;
serial.setPort(info);
if (serial.open(QIODevice::ReadWrite))
serial.close();
}

return a.exec();
}

057.png


参考資料

というか、ほとんどこのページの要約と翻訳って感じです...

QtSerialPort | Qt Wiki | Qt Project