在我的 qt 应用程序中,我有一个从线程中运行的对象调用的类(worker)。在我的工人阶级中,我创建了 QList,就像这样
QList <QString> albums;
while (i.hasNext())
{
QRegularExpressionMatch album = i.next();
albums.append(album.captured("album"));
}
emit SignalGotAlbums(albums);
我在另一个包装我的工人的类中收到这个信号,以供线程使用。我们将这个类称为 GetAlbumsThread。在那里我成功地在一个插槽中接收到 SignalGotAlbums
void GetAlbumsThread::Reply(QList <QString> &list)
{
emit gotAlbums(list);
emit finished();
}
在这个插槽中,我正在触发另一个信号 gotAlbums,该信号假定与我的 gui 线程中的一个插槽连接,并在那里传递我的 QList。我的问题是,当我试图将 QList 从线程传递到 gui 时,它只是不起作用!插槽未收到 gotAlbums 信号;
信号声明如下:
void gotAlbums(QList<QString> &);
并像这样连接到我的 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();
AlbumsReceived 出于某种原因永远不会被调用。连接返回真。有人可以帮我弄这个吗。我认为问题出在线程之间传递的 QList 中。