私のプロジェクトは、検索エンジンの動作を示す小さなプログラムを作成することです: 任意のクエリに対してインデックスを作成し、結果を返します。インデクサー部分で作業を完了しましたが、複数のファイルを一度にインデックス付けして改善したいと考えています。MainWindow クラスは次のとおりです。
class MainWindow : public QMainWindow
{
Q_OBJECT
.....
private:
Indexer * indexer;
QStringList fileList;
....
void index(QStringList list);
void add(const QString &filename);
}
これは次の実装ですadd
(同じファイルのインデックスを再度作成しないようadd
にアクセスfileList
する必要があるため、静的メソッドにすることはできません):
void MainWindow::add(const QString &filename)
{
if (!fileList.contains(filename))
{
indexer->addDocument(filename.toStdString());
fileList.append(filename);
qDebug() << "Indexed" << filename;
emit updatedList(fileList);
}
}
メソッドの実装は、ファイル リストを受け取り、各ファイル名index
を呼び出すことです。add
void MainWindow::index(QStringList list)
{
....
QtConcurrent::map(list, &MainWindow::add);
....
}
これらのコードをコンパイルするときに受け取るエラーは次のとおりです。
usr/include/qt4/QtCore/qtconcurrentmapkernel.h: In member function 'bool QtConcurrent::MapKernel<Iterator, MapFunctor>::runIteration(Iterator, int, void*) [with Iterator = QList<QString>::iterator, MapFunctor = QtConcurrent::MemberFunctionWrapper1<void, MainWindow, const QString&>]':
../search-engine/mainwindow.cpp:361:1: instantiated from here
/usr/include/qt4/QtCore/qtconcurrentmapkernel.h:73:9: error: no match for call to '(QtConcurrent::MemberFunctionWrapper1<void, MainWindow, const QString&>) (QString&)'
/usr/include/qt4/QtCore/qtconcurrentfunctionwrappers.h:128:7: note: candidate is:
/usr/include/qt4/QtCore/qtconcurrentfunctionwrappers.h:138:14: note: T QtConcurrent::MemberFunctionWrapper1<T, C, U>::operator()(C&, U) [with T = void, C = MainWindow, U = const QString&]
/usr/include/qt4/QtCore/qtconcurrentfunctionwrappers.h:138:14: note: candidate expects 2 arguments, 1 provided
私は QtConcurrent がどのように機能するかについてあまり詳しくありません。また、ドキュメントには詳細が記載されていません。ここの誰かが助けてくれることを本当に願っています。前もって感謝します。