2017-06-05 70 views
1

我在Qt中打開串口有問題。嘗試打開端口失敗後收到的錯誤消息是UnsupportedOperationError。我想指出的幾件事情:用Qt打開串口

  • 我嘗試使用USB(CDC)在ARM MCU實現港口,
  • 我可以打開其他應用程序的端口(如teraterm或realterm ),
  • 我能夠在一分鐘內開啓Qt應用程序中的端口。我在ARM設備中添加了一些代碼(根本不涉及USB功能),我不能再打開Qt中的端口。
  • 我測試,我可以發送/上的端口中的其它程序(即realterm)打開接收到的數據,
  • 端口工作在其他應用中,但不能QT(試圖從Qt的創建者的終端例如,它不能也打開端口),

我在過去遇到過這種行爲,但沒有時間深入其中。現在它阻止了我。打開港口的情況可能是什麼情況? qt是否提出任何額外要求?我真的很感激所有的幫助。 我在Windows機器上運行qt。

編輯:這是Qt創建者負責打開端口的終端示例的一部分。

void MainWindow::openSerialPort() 
{ 
    SettingsDialog::Settings p = settings->settings(); 
    serial->setPortName(p.name); 
    serial->setBaudRate(p.baudRate); 
    serial->setDataBits(p.dataBits); 
    serial->setParity(p.parity); 
    serial->setStopBits(p.stopBits); 
    serial->setFlowControl(p.flowControl); 
    if (serial->open(QIODevice::ReadWrite)) { 
     console->setEnabled(true); 
     console->setLocalEchoEnabled(p.localEchoEnabled); 
     ui->actionConnect->setEnabled(false); 
     ui->actionDisconnect->setEnabled(true); 
     ui->actionConfigure->setEnabled(false); 
     showStatusMessage(tr("Connected to %1 : %2, %3, %4, %5, %6") 
          .arg(p.name).arg(p.stringBaudRate).arg(p.stringDataBits) 
          .arg(p.stringParity).arg(p.stringStopBits).arg(p.stringFlowControl)); 
    } else { 
     qDebug() << "Failed to open serial port " << serial->portName() << "Error: " << serial->error(); 
     QMessageBox::critical(this, tr("Error"), serial->errorString()); 

     showStatusMessage(tr("Open error")); 
    } 
} 

我添加了行qith qDebug以顯示錯誤消息。它和我在Qt程序中一樣。

+0

不知道更改和您的代碼這將很難做一個故障排除在這裏。你是否創建了一個用於測試的最小Qt示例? – 0x0C4

+0

Qt創建者的「終端」示例非常少。這也是關於我在ARM的代碼,而不是Qt。關鍵是我可以用其他程序打開端口,但不能使用Qt。我查看了qserialport.cpp文件以查找「UnsupportedOperationError」字符串。問題是我找不到任何匹配的錯誤代碼。我的錯誤字符串是'QSerialPort :: SerialPortError(UnsupportedOperationError)'。 – Bremen

+0

Qt創建者的「終端」示例是否顯示相同的錯誤?請提供可追溯性程序的最低版本 – 0x0C4

回答

1

您正面臨Qt中的錯誤或過度排斥的行爲。在你自己的代碼中不可能有任何可以解決的問題。

如果沒有Qt的調試版本,也無法進行調試。使用一個調試版本,你可以準確地指出它在執行失敗的地方QSerialPort。然後您將知道發生了什麼,並能夠基於此報告Qt錯誤報告。由於您將被設置爲構建Qt,因此您可以自行修復此錯誤並以這種方式快速開始。