我想创建一个使用Qt和MercuryAPI(native-c)的RFID阅读器线程。它有一个native-c线程,但它有问题。我决定写一个我自己的。QThread自定义事件
到目前为止,我有用自定义事件(TagReadEvent
)发送数据的线程。它植入下列qDebug错误:
QCoreApplication::removePostedEvent: Internal error: 0xbfdfed8 1001 is posted
我无法找到任何叫QCoreApplication::removePostedEvent
,但下降这个错误时postEventList.size() == 0
。
TagReadEvent:
class TagReadEvent : public QEvent
{
public:
TagReadEvent();
~TagReadEvent();
QList<TMR_TagData> tagData;
};
自定义事件处理程序:
void MainWindow::customEvent(QEvent *event)
{
if (event->type() == (QEvent::User + 1)) {
TagReadEvent *tagEvent = static_cast<TagReadEvent *>(event);
for (int i = 0; i < tagEvent->tagData.length(); ++i) {
TMR_TagData tagData = tagEvent->tagData.at(i);
char epcStr[128];
TMR_bytesToHex(tagData.epc, tagData.epcByteCount, epcStr);
qDebug() << epcStr;
}
}
return QMainWindow::customEvent(event);
}
灌装和发送事件:
TagReadEvent event;
while (TMR_SUCCESS == TMR_hasMoreTags(&(mainWindow->reader))) {
TMR_TagReadData trd;
lastStatus = TMR_getNextTag(&(mainWindow->reader), &trd);
if (checkerr(tr("fetching tag")))
return;
event.tagData.append(trd.tag);
}
if (event.tagData.length() > 0)
QCoreApplication::postEvent(mainWindow,&event);