some comments:
1. why do you allocate the serial port on the stack?
make it a member, this way you don't need to allocate it in every method, and better on the heap.
It is dengeraus to do it the way you do.
2. why don't you use QDataStream on the serial port?
3. you want to use isOpen() not open() :
Qt Code:
  1. if(sp.isOpen()) //here
  2. {
  3. qWarning("port still open after closing");
  4. }
To copy to clipboard, switch view to plain text mode 

It could well be that once you fix these points, the problem will go away, if not, posts again.

Another point:
You don't need to use Posix_QexSerial port, it is not portable.
Use QextSerialPort, and give the _TTY_POSIX_ flag in the make file.
This way your code will compile on windows as well.