我是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。任何人都可以告诉我我做错了什么?
感谢您的帮助
答案 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)));