QPushbuttons

时间:2016-03-10 12:44:35

标签: c++ qt arduino serial-port usb

void CSerialController::sl_executeCommand(const QString s_command,QString&s_result){
QMutexLocker locker(mpo_mutex);
KT_Error t_error = ERROR_NONE;
QByteArray o_serialOutput;
QString s_serialAnswer = "";
char c_serialLetter = ' ';

// Port is already open

mpo_serial->clearBuffer();  // Flush and ReadAll

t_error = mpo_serial->sendStr(s_command); // 

NO_SUCCESS(t_error)
{
    Q_EMIT sg_throwError(t_error);
}

SUCCESS(t_error)
{
    while ((t_error == ERROR_NONE) && (c_serialLetter != '\n'))  // Reads Serial till newline is found 
    {
        t_error = mpo_serial->getChar(c_serialLetter);   // -> checks BytesAvailable -> if no bytes available -> waitForReadyRead(1)   <- This is in a Loop while given time is over(Timeouttime)
        o_serialOutput.append(c_serialLetter);
    }
}

NO_SUCCESS(t_error)
{
    Q_EMIT sg_throwError(t_error);
}

SUCCESS(t_error)
{
    s_serialAnswer = o_serialOutput;
    s_serialAnswer.remove("\r\n");
}

s_result = s_serialAnswer; }

我正在使用C ++和Qt 5.5,我无法使串行连接正常工作。我使用信号将QPushButton连接到CSerialController类中的一个插槽,该插槽在同一个类中调用此函数。我尝试了这个无限循环的功能,它始终正常工作。当我使用按钮时,它只是不工作。我第一次使用按钮它正常工作,但第二次我按下一个调用此插槽的按钮,串行端口有时只返回一个值。 (写作只是没有阅读)我甚至尝试改变这个类的线程,但这并没有帮助。如果你想我可以发布sendStr和getChar函数,但就像我说他们的工作没有问题(已经在很多项目中使用过)

更新:我尝试使用Windows API进行串行连接=问题消失了。看起来像旧CPU上的QSerialPort使用问题(I7-870)

0 个答案:

没有答案