class Object : public QObject
{
Q_OBJECT
public :
Object()
{
}
void objectSetNewText(QString &text)
{
m_cTextEdit.setNewText(text);
}
signals:
void signalThreadFinish(QList<Sentence> list);
public slots:
void slotThreadStart()
{
m_cTextEdit.detectSentence(m_sentList);
emit signalThreadFinish(m_sentList);//主线程接受这个信号
}
private :
CustomTextEditor m_cTextEdit;
QList<Sentence> m_sentList;
};
在主线程中C/C++ code
// Prepare sentences.
QString strText = m_textEdit.toPlainText();
clear();
m_textEdit.setNewText(strText);
Object obj;
QThread thread;
obj.objectSetNewText(strText);
obj.moveToThread(&thread);
QObject::connect(this, SIGNAL(signalThreadStart()), &obj, SLOT(slotThreadStart()));
QObject::connect(&obj, SIGNAL(signalThreadFinish(QList<Sentence>)), this, SLOT(slotThreadFinish(QList<Sentence>),Qt::QueuedConnection);//这样连接,槽函数不执行
thread.start();
emit signalThreadStart();
主线程中的槽函数C/C++ codevoid MainWindow::slotThreadFinish(QList<Sentence> list)
{
m_sentList = list;
...//操作UI
}
现在的情况是Object类的槽函数是在次线程里运行的,结束的时候发射一个信号,我想让主线程中的槽函数和这个信号关联,让这个槽函数在主线程中运行,因为这个槽函数要操作UI,由于信号是从次线程中发射的,而槽函数是在住线程里运行,所以我觉得是队列连接,但是现在的问题是,队列连接不成功,它没有执行,但是如果强制为直接连接,他是执行的,但是这样槽函数就会在次线程里运行了,由于该槽函数操作了UI,所以就报错了。不知道大家能不能理解我表达的意思,坐等高手解答吧……
简单的说就是,信号从次线程中发射,想让槽函数(在主线程中实现的)在主线程里执行,但是队列连接不起作用