2015-06-15 3 views
0

Я довольно новичок в QT и C++, и я получаю эту ошибку, которую я не могу решить. Я пытаюсь подключить currentRowChanged() сигнал модели выбора TableView к слоту, который я создал, чтобы я мог получать данные из выбранной строки.Неразрешенный внешний символ в QT connect()

Это мой код: Opciones.cpp

#include "opciones.h" 
    #include "ui_opciones.h" 
    #include <qsqldatabase.h> 
    #include <qsqlquery.h> 
    #include <qdebug.h> 
    #include <qmessagebox.h> 
    #include <qsqltablemodel.h> 
    #include <qitemselectionmodel.h> 
    #include "QModelIndex" 

    Opciones::Opciones(QWidget *parent) : 
     QDialog(parent), 
     ui(new Ui::Opciones) 
    { 
     .... 
     connect(ui->tablaJuegos->selectionModel(),SIGNAL(currentRowChanged(const QModelIndex & current, const QModelIndex & previous)), 
      this,SLOT(filaSeleccionada(const QModelIndex & current, const QModelIndex & previous))); 
    db.close(); 



} 

Opciones::~Opciones() 
{ 
    delete ui; 
} 
void filaSeleccionada(const QModelIndex & current, const QModelIndex & previous){ 


} 

Opciones.h

#ifndef OPCIONES_H 
#define OPCIONES_H 

#include <QDialog> 
#include <QModelIndex> 


namespace Ui { 
class Opciones; 
} 

class Opciones : public QDialog 
{ 
    Q_OBJECT 

public: 
    explicit Opciones(QWidget *parent = 0); 
    ~Opciones(); 

private slots: 
    void on_pushButton_2_clicked(); 

    void on_pushButton_3_clicked(); 


public slots: 
    void filaSeleccionada(const QModelIndex & current, const QModelIndex & previous); 



private: 
    Ui::Opciones *ui; 
}; 

#endif // OPCIONES_H 

I'm возникли проблемы с подключения() функция, которая дает мне следующая погрешность:

moc_opciones.obj:-1: error: LNK2019: unresolved external symbol "public: void __cdecl Opciones::filaSeleccionada(class QModelIndex const &,class QModelIndex const &)" ([email protected]@@[email protected]@[email protected]Z) referenced in function "private: static void __cdecl Opciones::qt_static_metacall(class QObject *,enum QMetaObject::Call,int,void * *)" ([email protected]@@[email protected]@[email protected]@@[email protected]) 

переменная tablaJuegos - это TableView, который я создал в дизайнере пользовательского интерфейса QT. Кто-нибудь скажет мне, что я делаю неправильно?

Спасибо за помощь

ответ

1

В Opciones.cpp вы не объявили filaSeleccionada, чтобы быть ограничена в пределах класса Opciones. Объявите это следующим образом:

void Opciones::filaSeleccionada(const QModelIndex & current, const QModelIndex & previous){ 
} 

То, что вы сделали в своем коде, чтобы объявить новую бесплатную функцию, filaSeleccionada. У компилятора нет проблем с этим, так как прекрасно иметь как свободную функцию, так и метод класса с таким же именем. Более того, во время связи все еще не возникает ошибка, так как вы не вызываете Opciones :: filaSeleccionada напрямую откуда угодно. Поэтому проблема сначала встречается с помощью connect().

+0

Это была ошибка нуб ... ха-ха! Большое спасибо. Ошибка исчезла. –

1

Еще одна ошибка, которую вы имеете в своем коде, помимо того, что упомянуто в книге Derek Jones, заключается в том, что при подключении сигналов к слотам в Qt вы не передаете имена параметров в подписях. Вам также не нужно явно указывать ссылки на const.

В коде у вас есть:

connect(ui->tablaJuegos->selectionModel(),SIGNAL(currentRowChanged(const QModelIndex & current, const QModelIndex & previous)), 
     this,SLOT(filaSeleccionada(const QModelIndex & current, const QModelIndex & previous))); 

То, что вы должны иметь это:

connect(ui->tablaJuegos->selectionModel(),SIGNAL(currentRowChanged(QModelIndex, QModelIndex)), 
     this,SLOT(filaSeleccionada(QModelIndex, QModelIndex))); 
Смежные вопросы