QSerialPort,QSerialPortInfo使用

6231 ワード

Qt操作シリアルポートの2つのクラスはQSerialPortとQSerialPortInfoクラス名からQSerialPortInfoがシリアルポート情報を取得するためのクラスであることがわかり、QSerialPortはシリアルポートを直接操作するクラスである.
QSerialPortInfo
[static]QList QSerialPortInfo::availablePorts()関数機能:Returns a list of available serial ports on the system.
この関数を使用して、コンピュータのシリアルポート接続状況を表示します.
QList m_list = QSerialPortInfo::availablePorts();
for(int i = 0;i
{
    qDebug() << "Name : " << m_list.at(i).portName();
    qDebug() << "Description : " << m_list.at(i).description();
    qDebug() << "Manufacturer: " << m_list.at(i).manufacturer();
    qDebug() << "Serial Number: " << m_list.at(i).serialNumber();
    qDebug() << "System Location: " << m_list.at(i).systemLocation();
}

foreachも使えます
foreach(const QSerialPortInfo &info,QSerialPortInfo::availablePorts())
{
    qDebug() << "Name : " << info.portName();
    qDebug() << "Description : " << info.description();
    qDebug() << "Manufacturer: " << info.manufacturer();
    qDebug() << "Serial Number: " << info.serialNumber();
    qDebug() << "System Location: " << info.systemLocation();
}

QSerialPort
以下にいくつかの方法があります.
  • bool setBaudRate(qint32 baudRate, Directions directions = AllDirections)
  • bool setDataBits(DataBits dataBits)
  • bool setFlowControl(FlowControl flowControl)
  • bool setStopBits(StopBits stopBits)
  • bool setParity(Parity parity)
  • void QSerialPort::setPortName(const QString&name)上記の方法で簡単に小さなdemoを書きました.機能は、シングルチップマシンから送信されたデータserialport.h
  • を受信することです.
    #ifndef SERIALPORT_H
    #define SERIALPORT_H
    #include 
    #include 
    
    class SerialPort : public QSerialPort
    {
        Q_OBJECT
    public:
        SerialPort();
        bool openPort(QString);
        void writeMsg(QString);
    private slots:
        void slot_DataRec();
    };
    
    #endif // SERIALPORT_H

    serialport.cpp
    #include "serialport.h"
    #include <qDebug>
    
    SerialPort::SerialPort()
    {
        this->setBaudRate(QSerialPort::Baud9600,QSerialPort::AllDirections);
        this->setDataBits(QSerialPort::Data8);
        this->setFlowControl(QSerialPort::NoFlowControl);
        this->setStopBits(QSerialPort::OneStop);
        this->setParity(QSerialPort::NoParity);
        connect(this,SIGNAL(readyRead()),this,SLOT(slot_DataRec()));
    }
    
    bool SerialPort::openPort(QString port)
    {
        this->setPortName(port);
        this->close();
        if(this->open(QIODevice::ReadWrite))
            return true;
        else
            return false;
    
    }
    
    void SerialPort::slot_DataRec()
    {
        QByteArray temp = this->read(1);
        qDebug()<<temp;
    }
    
    void SerialPort::writeMsg(QString msg)
    {
        this->write(msg.toLatin1());
    }

    OpenPort関数を呼び出すと、指定したシリアルポートを開き、データを受信できます.writeMsg関数を呼び出すと、開いているシリアルポートにデータを送信できます.