第一次接触Qt5中的串口编程,其中遇到了不少麻烦,其中一个就是QSerialPort::pinoutSignals ()。对于本就是Qt菜鸟的我来说,在阅读了很久官方文档后仍旧没明白该函数的用法,努力询问“度娘”也没有得到想要的回复,后经自己“坚持不懈,努力奋斗”终于得到预想结果。特在此留迹,希望能够给需要的伙伴们一点帮助。
QSerialPort::PinoutSignals PinoutSignals()
Qt 官网对此函数的解释如下:
Returns the state of the line signals in a bitmap format.
From this result, it is possible to allocate the state of the desired signal by applying a mask “AND”, where the mask is the desired enumeration value from QSerialPort::PinoutSignals.
Note: This method performs a system call, thus ensuring that the line signal states are returned properly. This is necessary when the underlying operating systems cannot provide proper notifications about the changes.
Note: The serial port has to be open before trying to get the pinout signals; otherwise returns NoSignal and sets the NotOpenError error code.
简单的翻译前两句就是:
该函数以位图的格式返回引脚信号状态。具体的返回值请查看 QSerialPort::PinoutSignals 的枚举值。
这其中让我疑问不解的就是这个以位图格式的返回值。“位图”在我的知识库中只出现在图像处理中(哈哈~,原谅我知识面太窄),所以不明白这具体返回的是什么,在网上百度很久也没有网友对此的详细应用,最后只能作罢,靠自己不懈地尝试,终于揭开了它的面纱。下面以我自己写的一个简单实例说明下。
QSerialPort::PinoutSignals m_signals = m_serialPort->pinoutSignals();
if(m_signals == (QSerialPort::DataTerminalReadySignal | QSerialPort::ClearToSendSignal)){
QMessageBox::information(NULL, QStringLiteral("状态:"), QStringLiteral("松开"));
}else if(m_signals == (QSerialPort::DataTerminalReadySignal | QSerialPort::DataSetReadySignal)){
QMessageBox::information(NULL, QStringLiteral("状态:"), QStringLiteral("按下"));
}
在上面的代码中,我使用 m_signals 变量作为 pinoutSignals() 函数的返回值,其格式如下:(QSerialPort::DataTerminalReadySignal | QSerialPort::ClearToSendSignal) ,其中的 QSerialPort::DataTerminalReadySignal 和 QSerialPort::ClearToSendSignal 就是 QSerialPort::PinoutSignals 中的两个枚举值。知道了函数返回值,就可以进行后面 if()...else()...
的判断进而执行对应指令了。(好开心~)
I’m George’s tips:
当我们想知道一个函数的返回值时,可以将该函数单独拉出来,将断点打到该位置,开启 IDE 中的调试模式,就可以获取此函数的返回值了。(仅限于单线程程序哦,多线程不建议用调试工具)