2015-01-26 137 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)打开设备,它运行。感谢帮助。