Well am not plotting in the same app as explained above.. and sending QImage does speed up things.
Assuming your plot has a size of 500x500 pixels your image will have a size of 250000 * 4 bytes = 1MB. After you rendered your point to the image and sent the complete image over the socket to your GUI application the image needs to be sent through the graphics pipeline of Qt.

Do you really expect, that this is faster than sending 2 doubles over a socket and painting it incrementally ( skipping a lot of steps of the Qt graphics pipeline ) to the plot widget ? F.e for a XCross symbol on X11 this means only 2 x XDrawLine - probably hardware accelerated.
I have tried a hack.. from the thread I emit a signal to main thread of device app. This then calls a function of that device class which sends the qimage to gui app through socket.
Does it mean you have an application with a GUI thread, that has an invisible plot widget. The only purpose of this widget is, that you want to render an offscreen image that is sent to a different aplication, that is able to display this image - probably not in a QwtPlot widget ?
... and this is working and it does speed up things
Compared to what ?

Anyway - Qwt isn't able to render a plot without a plot widget. The reason for this is that many attributes of the plot are stored in members of the plot widget ( having a QwtPlotScene object like in the QGV framework is on my TODO list ). So you need to have a plot widget and this needs to be allocated in the GUI thread.

But QwtPlot::print to a QImage should be possible from another thread. If it doesn't work in your application you need to report what the problems are in detail.

But IMO the overhead of rendering the image in a different thread is the last thing you have to worry.

Uwe