小编Sir*_*aat的帖子

将 QList<QString>* 传递给来自 QThread 的信号

在我的 qt 应用程序中,我有一个类(worker),它是从在线程中运行的对象调用的。在我的工人阶级中,我创建了 QList,如下所示

QList <QString> albums;

while (i.hasNext())
{
  QRegularExpressionMatch album = i.next();
  albums.append(album.captured("album"));
}
emit SignalGotAlbums(albums);
Run Code Online (Sandbox Code Playgroud)

我在另一个包装我的工作线程的类中收到这个信号,以供线程使用。我们将此类命名为 GetAlbumsThread。在那里我成功地在插槽中接收到 SignalGotAlbums

void GetAlbumsThread::Reply(QList <QString> &list)
{

 emit gotAlbums(list);
 emit finished();
}
Run Code Online (Sandbox Code Playgroud)

在这个插槽中,我正在触发另一个信号gotAlbums,该信号应该与我的gui线程中的插槽连接,并将我的QList传递到那里。我的问题是,当我尝试将 QList 从线程传递到 gui 时,它不起作用!插槽未收到 gotAlbums 信号;

信号声明如下:

void gotAlbums(QList<QString> &);
Run Code Online (Sandbox Code Playgroud)

并连接到我的 gui 插槽(当然在我的 gui 线程中),如下所示:

private slots:
    void AlbumsReceived(QList<QString> &list)
    ...

    QThread* albumsThread = new QThread();

    GetAlbumsThread *albumsObject = new GetAlbumsThread();

    albumsObject->moveToThread(albumsThread);

    connect(albumsThread, SIGNAL(started()), albumsObject, SLOT(process()));

    connect(albumsObject, SIGNAL(gotAlbums(QList<QString> &)), this, SLOT(AlbumsReceived(QList<QString> &));

     albumsThread->start();
Run Code Online (Sandbox Code Playgroud)

由于某种原因,AlbumsReceived 从未被调用。连接返回真。有人可以帮我弄这个吗。我认为问题在于线程之间传递 QList。

qt multithreading signals qlist slot

4
推荐指数
2
解决办法
7994
查看次数

标签 统计

multithreading ×1

qlist ×1

qt ×1

signals ×1

slot ×1