В моем приложении qt у меня есть класс (рабочий), который вызывается из объекта, который работает в потоке. В моем классе рабочего я создать QList, как этотПередача QList <QString> * к сигналу от QThread
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();
}
В этом слоте I'am стрельбы другого сигнал gotAlbums, который предполагает, чтобы быть связан с прорезью в моей графической оболочке нити, и передать мою QList там. Моя проблема в том, что когда я пытаюсь передать QList из потока в gui, он просто не работает! Слот не получает сигнал gotAlbums;
Сигнал объявляется так:
void gotAlbums(QList<QString> &);
И подключен к моему графического интерфейса слот (конечно в моей графической оболочки нити) так:
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 между потоками.
Если я что-то отсутствует, вы создаете альбомы QList в качестве локальной переменной в стеке, затем передавая ссылку на него в вашем сигнале, а это значит, что QList мог выйти из области действия и был уничтожен на время, когда очереди с очередями вернутся к потоку графического интерфейса. Это не должно помешать слоту, принимающему сигнал, но потенциально может быть неприятной ошибкой. – Ninjammer
Должен ли я сделать глобальный QList? или создать его с новым? – SirLanceloaaat
btw Я также пытался сделать QList в кучу, по Calline new Qlist, но я получаю недействительное приложение 'sizeof' для неполного типа 'QStaticAssertFailure ' error –
SirLanceloaaat