读书人

关于QT中跨线程的信号处理有关问题求

发布时间: 2013-12-05 22:27:44 作者: rapoo

关于QT中跨线程的信号处理问题,求大神!
说明如下:
1. Receiver对象生存在主线程,主线程拥有事件循环;
2. Receiver对象生存期足够长;
3. connect函数调用成功,连接类型缺省为autoConnection, 对于跨线程的信号,将会自动使用队列连接;
4. 信号确实发送,emit threadSignal();语句确实执行了;
5. Receiver对象所在线程(主线程)界面响应正常,事件循环没有阻塞;
6. 问题是槽函数从来都没有执行过?纠结其原因。。。

望大神解惑


class MyThread : public QThread
{
Q_OBJECT

public:
MyThread();

void run()
{
emit threadSignal();
}

signals:
void threadSignal();
};


class Receiver : public QObject
{
Q_OBJECT

public:
Receiver()
{
MyThread * thread = new MyThread;
connect(thread, SIGNAL(threadSignal()), this, SLOT(slotFunc()));
thread->start();
}

private slots:
void slotFunc()
{
qDebug() << "receive one signal.";
}
};


[解决办法]
引用:
说明如下:
1. Receiver对象生存在主线程,主线程拥有事件循环;
2. Receiver对象生存期足够长;
3. connect函数调用成功,连接类型缺省为autoConnection, 对于跨线程的信号,将会自动使用队列连接;
4. 信号确实发送,emit threadSignal();语句确实执行了;
5. Receiver对象所在线程(主线程)界面响应正常,事件循环没有阻塞;
6. 问题是槽函数从来都没有执行过?纠结其原因。。。

望大神解惑


class MyThread : public QThread
{
Q_OBJECT

public:
MyThread();

void run()
{
emit threadSignal();
}

signals:
void threadSignal();
};


class Receiver : public QObject
{
Q_OBJECT

public:
Receiver()
{
MyThread * thread = new MyThread;
connect(thread, SIGNAL(threadSignal()), this, SLOT(slotFunc()));
thread->start();
}

private slots:
void slotFunc()
{
qDebug() << "receive one signal.";
}
};



其实你可以去看下Qt的帮助文档是怎么实现多线程的,看了你就懂了。
http://qt-project.org/doc/qt-5.0/qtcore/qthread.html

读书人网 >QT开发

热点推荐