我想将QString
传递给线程。使用this答案,
这是我的代码:
在MainWindow.cpp中:
mmthread = new mythread;
mmthread->start();
connect(this,SIGNAL(sendtothread(QString)),mmthread,SLOT(getfrom_main(QString)),Qt::QueuedConnection);
emit sendtothread(mystr);
在mainwindow.h中:
signals:
void sendtothread(QString);
在mythread.cpp中:
void mythread::getfrom_main(QString str)
{
//something
}
在mythread.h中:
public slots:
void getfrom_main(QString);
但是似乎根本没有调用
getfrom_main
。我的错误在哪里?
编辑:
我有3个类似的线程:
在mythread.cpp中:
mythread :: mythread()
{
moveToThread(this);
}
void mythread::run(){
//something1
}
void mythread::getfrom_main(QString comm)
{
comment = comm;
emit message(comment);
}
在mythread.h中:
class mythread : public QThread
{
Q_OBJECT
public:
explicit mythread();
void run();
signals:
void message (QString);
private:
QString comment;
public slots:
void getfrom_main(QString);
};
something1
总是在我所有的线程中执行。but not about getfrom_main
。谢谢。 最佳答案
错误:
mythread :: mythread()
{
moveToThread(this); // you don't need to do it
}
错误的(您实际上不需要在代码中继承
QThread
):void mythread::run()
{
//something1
// after "something" you need to run an event loop:
exec();
}
exec()
将运行一个事件循环,该循环将处理所有信号和插槽。