Я пытаюсь использовать QtConcurrent::map для запуска этой функции.
//This function is used through QtConcurrent::map to create images from a QString path
void MainWindow::createQImage(QString* path) {
//create an image from the given path
QImage* t = new QImage(*path);
imageList->append(t);
}
в этом контейнере/последовательности (объявленном в заголовке основного окна и инициализированном в конструкторе основного окна)
QList<QImage *> *imageList = new QList<QImage *>;
Вот код, который я пытаюсь запустить
QFutureWatcher<void> futureWatcher;
futureWatcher.setFuture(QtConcurrent::map(imageList, &MainWindow::createQImage));
и вот какие ошибки я получаю:
request for member 'begin' in 'sequence', which is of non-class type 'QList<QImage*>*'
request for member 'end' in 'sequence', which is of non-class type 'QList<QImage*>*'
Мне нужно, чтобы функция «createQImage» запускалась для каждого элемента в «imageList», число которых может исчисляться тысячами. Я считаю, что проблема связана с первым параметром функции карты. И из того, что я читал, это может быть связано с совместимостью. В Интернете не так много примеров кода, с которыми я мог бы иметь дело. Я новичок в Qt и не самый опытный программист, но буду признателен за помощь и отзывы.
В качестве альтернативы, есть ли лучший способ сделать это с помощью QtConcurrent?
Заранее спасибо!
QtConcurrent::map()
перебирает каждый элемент в данном списке. Поскольку вы только создаете и добавляете элементы в функцию карты, ваш imageList изначально будет пустым, и поэтому вашcreateQImage()
никогда не будет вызываться. Вместо этого вы можете использовать непустое, заполненное нулемQVector<QImage*> imageList(numberOfImagesYouNeed, Q_NULLPTR)
и передать его в map(). - person Martin Hennings   schedule 20.09.2018