QT connect()中未解析的外部符号

时间:2015-06-15 05:52:30

标签: c++ qt

我是QT和C ++的新手,我收到了这个我无法解决的错误。我试图将TableView选择模型的currentRowChanged()信号连接到我创建的插槽,这样我就可以从所选行中获取数据。

这是我的代码: 的 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

我遇到了connect()函数的问题,它给出了以下错误:

moc_opciones.obj:-1: error: LNK2019: unresolved external symbol "public: void __cdecl Opciones::filaSeleccionada(class QModelIndex const &,class QModelIndex const &)" (?filaSeleccionada@Opciones@@QEAAXAEBVQModelIndex@@0@Z) referenced in function "private: static void __cdecl Opciones::qt_static_metacall(class QObject *,enum QMetaObject::Call,int,void * *)" (?qt_static_metacall@Opciones@@CAXPEAVQObject@@W4Call@QMetaObject@@HPEAPEAX@Z)

变量tablaJuegos是我在QT的UI设计器中创建的TableView。任何人都可以告诉我我做错了什么?

感谢您的帮助

2 个答案:

答案 0 :(得分:1)

在Opciones.cpp中,您尚未宣布filaSeleccionada属于Opciones类。以这种方式声明:

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

您在代码中所做的是声明一个新的自由函数filaSeleccionada。编译器对此没有任何问题,因为可以同时使用自由函数和具有相同名称的类作用域方法。此外,在链接时仍然没有错误,因为您不是从任何地方直接调用Opciones :: filaSeleccionada 。因此,connect()首先遇到问题。

答案 1 :(得分: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)));