c++qtcan-bussocketcancanutils

CAN Communication in QT


I have a specific problem with the CAN communication in QT. It is not a problem to send/write CAN messages, but the readFrame() function in QT doesn't load my received frames. If you are implementing a CAN communication in C++ you can use the read() and write() functions. But in QT it is not supported. In general the read function interrupts the programm until a message is received, how can I do the same in QT?

QCanBusFrame frame = device->readFrame();

Thanks for your help, I really appreciate it!


Solution

  • From the QT docs:

    Returns the next QCanBusFrame from the queue; otherwise returns an empty QCanBusFrame. The returned frame is removed from the queue.

    The queue operates according to the FIFO principle.

    https://doc.qt.io/qt-5.12/qcanbusdevice.html#readFrame

    Try first calling

    bool QCanBusDevice::waitForFramesReceived(int msecs)
    

    https://doc.qt.io/qt-5.12/qcanbusdevice.html#waitForFramesReceived

    and then read frames