2015-01-26 182 views
1

我想配置一個使用Qt的串行鍋通信,這是我在Qt的第一個應用程序,並根據多線程我寫這段代碼5.1串行通信:Qt的使用QSerialPort

#include "mainwindow.h" 
#include "ui_mainwindow.h" 
#include <QSerialPort> 

QSerialPort serial; 

MainWindow::MainWindow(QWidget *parent): QMainWindow(parent), 
             ui(new Ui::MainWindow) 
{ 
    ui->setupUi(this); 

    serial.open(QSerialPort::ReadWrite); 
    serial.setPortName("ttyACM0"); 
    serial.setBaudRate(QSerialPort::Baud9600); 
    serial.setDataBits(QSerialPort::Data8); 
    serial.setParity(QSerialPort::NoParity); 
    serial.setStopBits(QSerialPort::OneStop); 
    serial.setFlowControl(QSerialPort::NoFlowControl); 
    serial.write("hello"); 
} 

MainWindow::~MainWindow() 
{ 
    delete ui; 
    serial.close(); 
} 

與編譯器告訴我,當我建立項目時,設備未打開。

+1

什麼是確切的錯誤信息,你什麼時候看到它?截圖可能會有所幫助,因爲我非常懷疑_compiler_知道關於設備的任何內容以及它們是否處於打開狀態。 – 2015-01-27 00:58:45

+0

用'QSerialPortInfo :: availablePorts()'檢查可用的串行端口。你也可能需要sudo權限才能訪問串口設備。 – Nejat 2015-01-27 05:47:43

回答

1

你確定你有這個設備可以打開嗎?如果這是一個* nix系統,請嘗試:

ls -l /sys/class/tty/ttyUSB* ### if USB device or 
ls -l /sys/class/tty/ttyACM* ### if ACM, whatever that is 

你應該得到一個符號鏈接到devices目錄,至少你在linux上做。

此外,您的代碼建立良好,但我形象它並不實際運行

此外,它看起來像QSerialPort也有一個方法(從QioDevice繼承)稱爲「isOpen」返回一個布爾值,如果設備已經打開,你應該使用之前,先打開和關閉知道什麼是實際設備的狀態是。

0

我已經使用serial.open(QIODevice::ReadWrite)打開設備,它運行。感謝幫助。