2013-09-27 48 views

回答

6

您可以在QtSerialPort插件中使用QSerialPort類的error信號。在我們的文檔中查看詳細信息。

http://qt-project.org/doc/qt-5.1/qtserialport/qserialport.html#error-prop

您需要基本寫:

connect(mySerialPort, SIGNAL(error(QSerialPort::SerialPortError)), this, 
     SLOT(handleError(QSerialPort::SerialPortError))); 

... 

void MyClass::handleError(QSerialPort::SerialPortError error) 
{ 
    if (error == QSerialPort::ResourceError) { 
     QMessageBox::critical(this, tr("Critical Error"), serial->errorString()); 
     closeSerialPort(); 
    } 
} 

QtSerialPort可以很容易地使用Qt安裝5.1 <爲包分配。但是,我們確信QtSerialPort可以與之前的版本一起使用,包括Qt 4.8.X.在這裏,你可以找到的Qt 4的指示得到這個爲您安裝:

  • 混帳克隆[email protected]:QT/qtserialport.git

  • CD qtserialport

  • QMAKE

  • make

  • sudo make install。

然後,你需要在你的qmake項目文件中的以下行,如果你碰巧使用的qmake:

Qt 5: QT += serialport 
Qt 4: COMFIG += serialport 
+1

終於找到了一個解決方案。實際上我最終使用'QSerialPortInfo'來驗證一個端口,然後再使用它。 –

+1

你指出我正確的方向。我只是需要一些東西來驗證串口在嘗試使用開放端口執行任何操作之前是否實際插入了串口。我做了一些稍微不同的事情,爲我正在做的事情工作。 –

+0

究竟是* ResourceError是什麼?我偶爾會在一些串口通信中看到它,但我仍然能夠在端口上發送和接收一些數據。 (我的通信層開始表現不好,但看起來並沒有完全破壞 - 一些有效的數據包仍然能夠通過。) –

2

使用QSerialPortInfo將實現結果:

bool MyClass::checkPort() 
{ 
    QSerialPortInfo *portInfo = new QSerialPortInfo(ui->serialDevice->currentText()); 
    // ui->serialDevice being a combobox of available serial ports 

    if (portInfo->isValid()) 
    { 
     return true; 
    } 
    else 
    { 
     return false; 
    } 
} 
1

isValid()是現在已經過時了。可以使用isBusy(),因爲它在打開端口時將返回true,並且在端口不在那裏時返回false(並且仍將其打開)。當availablePorts()一直返回不存在但打開的端口時,也是​​這種情況,因爲您通過打開它將端口保留在列表中。