2015-03-08 3 views
0

Я пытаюсь записать принтер с последовательным портом. Я использую Qt5.4 и код ниже:qt Последовательный порт не открыт

bool SerialPortWriter::openPort(QString portName, QSerialPort::BaudRate actualBaudRate) 
{ 
    qDebug() << Q_FUNC_INFO << "Invoked"; 
    bool open = false; 

    if (NULL != m_pSerialPort) 
    { 
     qDebug() << Q_FUNC_INFO << "set name & params"; 
     m_pSerialPort->setPortName(portName); 
     qDebug() << Q_FUNC_INFO << "set baudrate:" << 
        m_pSerialPort->setBaudRate(actualBaudRate); 
     qDebug() << Q_FUNC_INFO << "set databits:" << 
        m_pSerialPort->setDataBits(QSerialPort::Data8); 
     qDebug() << Q_FUNC_INFO << "set parity:" << 
        m_pSerialPort->setParity(QSerialPort::NoParity); 
     qDebug() << Q_FUNC_INFO << "set stopbits:" << 
        m_pSerialPort->setStopBits(QSerialPort::OneStop); 
     qDebug() << Q_FUNC_INFO << "set flow contrl:" << 
        m_pSerialPort->setFlowControl(QSerialPort::HardwareControl); 
     open = m_pSerialPort->open(QIODevice::WriteOnly); 
    } 

    qDebug() << Q_FUNC_INFO << "Exits" << open; 
    return open; 
} 

void SerialPortWriter::handleErrorOccurance(QSerialPort::SerialPortError error) 
{ 
    qDebug() << Q_FUNC_INFO << "Invoked"; 

    qDebug() << Q_FUNC_INFO << m_pSerialPort->errorString(); 
    qDebug() << Q_FUNC_INFO << m_pSerialPort->error(); 

    if (error == QSerialPort::WriteError) 
    { 
     qDebug(qPrintable(m_pSerialPort->errorString())); 
     qDebug() << Q_FUNC_INFO << m_pSerialPort->error(); 
    } 
} 

Я получаю ошибку:

void SerialPortWriter::handleErrorOccurance(QSerialPort::SerialPortError) Invoked 
void SerialPortWriter::handleErrorOccurance(QSerialPort::SerialPortError) "Incorrect function." 
void SerialPortWriter::handleErrorOccurance(QSerialPort::SerialPortError) 11 
bool SerialPortWriter::openPort(QString, QSerialPort::BaudRate) Exits false 

Может кто-то поможет узнать, почему это происходит? Есть что-нибудь с драйвером на моем ПК. Из окон, когда я пытаюсь проверить печать работает нормально ..

ответ

0

, если я правильно помню, вам нужно установить параметры порта после открытия порта:

open = m_pSerialPort->open(QIODevice::WriteOnly); 
    m_pSerialPort->setPortName(portName); 
    qDebug() << Q_FUNC_INFO << "set baudrate:" << 
       m_pSerialPort->setBaudRate(actualBaudRate); 
    qDebug() << Q_FUNC_INFO << "set databits:" << 
       m_pSerialPort->setDataBits(QSerialPort::Data8); 
    qDebug() << Q_FUNC_INFO << "set parity:" << 
       m_pSerialPort->setParity(QSerialPort::NoParity); 
    qDebug() << Q_FUNC_INFO << "set stopbits:" << 
       m_pSerialPort->setStopBits(QSerialPort::OneStop); 
    qDebug() << Q_FUNC_INFO << "set flow contrl:" << 
       m_pSerialPort->setFlowControl(QSerialPort::HardwareControl); 

и вы должны переключиться на asyncio, так как у QtSerialPort есть много других проблем, которые могут возникнуть ...

+0

В Qt 5.4 он изменен. Мы должны установить перед открытием порта. [Ссылка] (http://doc.qt.io/qt-5/qtserialport-terminal-example.html) – Abin