QT测试小工具(串口通信)

最近手头上的一个STM32的项目需要通过串口通信控制,现在手头上的开发已经完全转到FEDORA之下。所以用QT做了一个小测试工具,直接快速创建工程,选择widget,带ui文件。其中需要用到串口,在pro文件中添加QT       += serialport,在头文件中包含:

#include
#include

namespace Ui {
class Widget;
}

class Widget : public QWidget
{
    Q_OBJECT

public:
    explicit Widget(QWidget *parent = 0);
    ~Widget();

private slots:
    void on_pushButton_clicked();

private:
    Ui::Widget  *ui;
public:
    QList       list;
    bool            com_open;
    QSerialPort *comport;
};

其中可以通过执行下面的程序将串口信息添加到list中。

    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();
       list.append(info);
    }

在按键的事件中,实现打开或关闭串口:

void Widget::on_pushButton_clicked()
{
    if (com_open)
    {
        comport->close();
        ui->pushButton->setText(QString("打开串口"));
        com_open = false;
    }
    else
    {
        QSerialPortInfo info;
        info = list.at(ui->portlist->currentIndex());//ui->portlist是一个combox
        qDebug() << "Name : " << info.portName();
        qDebug() << "Description : " << info.description();
        qDebug() << "Manufacturer: " << info.manufacturer();
        qDebug() << "Serial Number: " << info.serialNumber();
        qDebug() << "System Location: " << info.systemLocation();
        comport->setPort(info);
        //comport->setPortName(filename);

        if (comport->open(QIODevice::ReadWrite))
        {
            ui->pushButton->setText(QString("关闭串口"));
            comport->setBaudRate(QSerialPort::Baud115200,QSerialPort::AllDirections);
            comport->setDataBits(QSerialPort::Data8);
            comport->setParity(QSerialPort::NoParity);
            comport->setStopBits(QSerialPort::OneStop);
           // my_serialport->setStopBits(QSerialPort::TwoStop);
            comport->setFlowControl(QSerialPort::NoFlowControl);
            com_open = true;
        }
        else
            QMessageBox::information(this, tr("Opening com failed"), tr("Could not open file %1").arg(info.portName()));
    }
}

然后可以通过comport->write来发送串口数据。

参考:

Qt 串口类QSerialPort 使用笔记  -- blog.csdn.net/liyuanbhu/article/details/45540825

QT5 串口收发实例代码 -- http://blog.csdn.net/liang890319/article/details/13502885

你可能感兴趣的:(QT)