在我的Qt应用程序中,我有一个类(worker),它从运行在线程中的对象中调用。在我的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从未被调用。connect返回true。有人能帮我解决这个问题吗?我认为问题出在不同线程之间传递QList。