QtConcurrent::map не принимает параметры

Я захотел запустить функцию с QtConcurrent::map, но всегда получаю ошибки... У меня есть две функции в Mainwindow: on_listWidget_itemClicked and _fillTreeWithList(QStringList selectedListWidget). Функция on_listWidget_itemClicked should use map with _fillTreeWithList.

Мой код:

Заголовок:

QFuture<void> SqlLoadingThread;
void _fillTreeWithList(QStringList);
void on_listWidget_itemClicked(QListWidgetItem *item);

Цена за тысячу показов:

void MainWindow::on_listWidget_itemClicked(QListWidgetItem *item)
{
    QStringList selectedListWidget;
    QList<QListWidgetItem *> selected=ui->listWidget->selectedItems();
    foreach (QListWidgetItem * item, selected){
        selectedListWidget.append(item->text());
    }
    if(SqlLoadingThread.isRunning()){
        SqlLoadingThread.cancel();
    }
    QList<QStringList> list;
    list.append(selectedListWidget);
    SqlLoadingThread=QtConcurrent::map(&list, &MainWindow::_fillTreeWithList);
}

Ошибка:

  ...mainwindow.cpp:56: Error: no matching function for call to 'map(QList<QStringList>*, void (MainWindow::*)(QStringList))'
 SqlLoadingThread=QtConcurrent::map(&list, &MainWindow::_fillTreeWithList);
                                                                         ^

Кто-нибудь знает, как решить мою проблему?


person Kanashius    schedule 21.11.2014    source источник
comment
_fillTreeWithList не может быть нестатической функцией-членом.   -  person Oktalist    schedule 21.11.2014


Ответы (1)


Из документов Последовательность следует брать по ссылке, а не по указателю

QFuture<void> QtConcurrent::map ( Sequence & sequence, MapFunction function )

Пытаться:

SqlLoadingThread=QtConcurrent::map(list, &MainWindow::_fillTreeWithList);

Кроме того, вам нужно, чтобы ваша MapFunction принимала параметр (QStringList) по ссылке:

void _fillTreeWithList(QStringList&);
person tinkertime    schedule 21.11.2014
comment
Теперь я получаю другую ошибку: D:\Programme\Qtneu\5.3\mingw482_32\include\QtConcurrent\qtconcurrentmapkernel.h:71: Fehler: нет соответствия для вызова '(QtConcurrent::MemberFunctionWrapper1‹void, MainWindow, QStringList›) (QStringList& )' карта(*это); ^ Я многое перепробовал, но ничего не хочется запускать :) - person Kanashius; 21.11.2014
comment
добавил дополнение выше - person tinkertime; 21.11.2014
comment
Та же ошибка: нет совпадения для вызова '(QtConcurrent::MemberFunctionWrapper1‹void, MainWindow, QStringList&›) (QStringList&)' map(*it); ^ - person Kanashius; 22.11.2014