我想将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()将运行一个事件循环,该循环将处理所有信号和插槽。

10-06 11:44