change showError calls in hardware read function to be signals

This avoids creating a QMessageBox in a non-GUI thread.