QT:将 QString 传递给 QThread

QT : Passing QString to QThread

本文关键字:QThread QString QT      更新时间:2023-10-16

我想将QString传递给线程。使用这个答案,这是我的代码:在主窗口中.cpp

mmthread = new mythread;
        mmthread->start();
        connect(this,SIGNAL(sendtothread(QString)),mmthread,SLOT(getfrom_main(QString)),Qt::QueuedConnection);
        emit sendtothread(mystr);

主窗口中:

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