It looks that you have to call Node's output setStreamName() before you create a Device. Otherwise you won't get events from device's getQueueEvent().
For example, in the examples device_queue_event.cpp, if you move the line
device.getQueueEvent() will block, not return anything.
It seems strange me to the API behaves this way. And sometime you need the device before you connect the pipeline, for example, you need the device to get the calibration info.