12,925
回編集
(→非同期) |
編集の要約なし |
||
104行目: | 104行目: | ||
</syntaxhighlight> | </syntaxhighlight> | ||
<br> | <br> | ||
==== 非同期 ==== | |||
非同期でデータを受信する場合、<code>QSerialPort</code>クラスのシグナルとスロットのメカニズムを使用する。<br> | |||
これにより、データが受信された時に自動的に通知されて、アプリケーションのメインループをブロックすることなくデータを受信することができる。<br> | |||
<br> | |||
まず、<code>QObject</code>クラスを継承したクラスを定義する。<br> | |||
シリアルポートからのデータの受信を管理するためのスロットを用意する。<br> | |||
以下の例では、シリアルポートがデータを受信したことを検出するために、<code>readyRead</code>シグナルを使用している。<br> | |||
<syntaxhighlight lang="c++"> | |||
// Sample.hファイル | |||
#include <QCoreApplication> | |||
#include <QSerialPort> | |||
#include <QDebug> | |||
class SerialPortReader : public QObject | |||
{ | |||
Q_OBJECT | |||
public: | |||
SerialPortReader(QSerialPort *serialPort, QObject *parent = nullptr) : QObject(parent), m_serialPort(serialPort) | |||
{ | |||
connect(m_serialPort, &QSerialPort::readyRead, this, &SerialPortReader::handleReadyRead); | |||
} | |||
private slots: | |||
void handleReadyRead() | |||
{ | |||
const QByteArray data = m_serialPort->readAll(); | |||
qDebug() << "Recieved data : " << data; | |||
} | |||
private: | |||
QSerialPort *m_serialPort; | |||
}; | |||
</syntaxhighlight> | |||
<br> | |||
<syntaxhighlight lang="c++"> | |||
// Sample.cppファイル | |||
#include <QCoreApplication> | |||
#include <QSerialPort> | |||
#include <QDebug> | |||
int main(int argc, char *argv[]) | |||
{ | |||
QCoreApplication app(argc, argv); | |||
QSerialPort serial; | |||
serial.setPortName("/dev/ttyUSB0"); // シリアルポート名 (環境に合わせて変更すること) | |||
serial.setBaudRate(QSerialPort::Baud9600); // ボーレート 9600[bps] | |||
serial.setDataBits(QSerialPort::Data8); // データビット 8[ビット] | |||
serial.setParity(QSerialPort::NoParity); // パリティなし | |||
serial.setStopBits(QSerialPort::OneStop); // ストップビット 1[ビット] | |||
serial.setFlowControl(QSerialPort::NoFlowControl); // フロー制御なし | |||
if (!serial.open(QIODevice::ReadWrite)) { | |||
qDebug() << "Could not open serial port : " << serial.errorString(); | |||
return -1; | |||
} | |||
SerialPortReader reader(&serial); | |||
return app.exec(); | |||
} | |||
</syntaxhighlight> | |||
<br><br> | |||
== データの送受信 == | |||
==== 非同期 ==== | ==== 非同期 ==== | ||
非同期でデータを受信する場合、<code>QSerialPort</code>クラスのシグナルとスロットのメカニズムを使用する。<br> | 非同期でデータを受信する場合、<code>QSerialPort</code>クラスのシグナルとスロットのメカニズムを使用する。<br> |