The problem is that you are constructing a stack object here:
QwtPlot plot; //Create plot widget
That is true that you are trying to show the plot at the end of the method, but the show() method is not blocking with an event loop like the QDialog classes when you use the exec() call on them.
It would be processed, but you are leaving the scope right after the call either way.
There are several ways of addressing this issue, but I would strive for the Qt parent/child hierarchy where the deletion will come automatically when using pointers.
1) Qt parent/child relation
QwtPlot *plot = new QwtPlot(this);
^^^^
2) Make "plot" a class member
plot.show();
and construct it in the class constructor.
3) Use a smart pointer
QSharedPointer<QwtPlot> plot = QSharedPointer<QwtPlot>(new QwtPlot());
It depends on your further context of the class which way to pick up, so try to understand these approaches, and take your peek.