Есть сигнал у объекта класса MainWindow:
class MainWindow : public QMainWindow
{
Q_OBJECT
signals:
void selectPointsFile(QString &fileName);
Эмитится так:
// Отправка сигнала что выбран новый файл бинарных координат для точек
emit selectPointsFile(fileName);
Есть слот у объекта класса PointsLoader:
class PointsLoader : public QObject
{
Q_OBJECT
public slots:
void setPointsFile(QString &fileName);
Реализация слота:
void PointsLoader::setPointsFile(QString &fileName)
{
qDebug() << "Set new points file";
mFileName=fileName;
}
Они соеденены в «новом» синтаксисе. Объект MainWindow доступен по указателю, а PointsLoader в явном виде, поэтому у него адрес берется:
// Главное окно оповещает считыватель точек, что задан новый файл координат
connect(mMainWindow, &MainWindow::selectPointsFile,
&mPointsLoader, &PointsLoader::setPointsFile);
Компиляция проходит без ошибок. Но когда выбираешь новый файл и эмитится сигнал selectPointsFile(fileName), выдается ошибка:
QObject::connect: Cannot queue arguments of type 'QString&'
(Make sure 'QString&' is registered using qRegisterMetaType().)
Если переделать параметр с типа QString& на QString, то ошибка исчезает. Но мне нужно сделать именно по ссылке, так как дальше я буду делать похожий сигнал/слот, который будет передавать большой блок данных, и хотел бы его уметь передавать по ссылке.
Примечание: объект класса PointsLoader находится в отдельном потоке, возможно из-за это проблема? Но как ее можно обойти чтобы не гонять в явном виде данные, а только ссылку на них?