读书人

moveToThread(this)模式形成的线程无法

发布时间: 2012-12-15 15:16:03 作者: rapoo

moveToThread(this)方式形成的线程无法emit signal,请大神看看

PhoneConnectEngine::PhoneConnectEngine(QObject *parent) :
QThread(parent)
{
moveToThread(this);

qRegisterMetaType<QByteArray>("TDeviceConnectState");
connect(this, SIGNAL(stateChanged(TDeviceConnectState)), this, SLOT(onStateChanged(TDeviceConnectState)),Qt::QueuedConnection);

m_deviceState = ENotConnected;
start();
}
....
m_phoneConnectEngine = new PhoneConnectEngine();
connect(m_phoneConnectEngine, SIGNAL(stateChanged(TDeviceConnectState)), this, SLOT(onStateChanged(TDeviceConnectState)));//这里试图将状态信号不能成功发出来,debug出现segment fault,去掉这个connect,PhoneConnectEngine run正常,完全没有问题。

相关错误时的stack如下图片所示:


[最优解释]
不建议LZ使用moveToThread(this),虽然说这种用法可以起作用。看下下面这篇博文吧。
http://blog.qt.digia.com/blog/2010/06/17/youre-doing-it-wrong/
[其他解释]
qRegisterMetaType<QByteArray>("TDeviceConnectState");

这个写错了,应该是TDeviceConnectState
[其他解释]
该回复于2012-11-19 15:12:19被管理员删除

读书人网 >QT开发

热点推荐