Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/132.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ QSqlTableModel继承表中出错_C++_Qt4 - Fatal编程技术网

C++ QSqlTableModel继承表中出错

C++ QSqlTableModel继承表中出错,c++,qt4,C++,Qt4,我有一个从QSqlTableModel继承的类,它在调用submitAll()插槽之后,在调用insertPoint几次之后中断。这是代码 谢谢你的帮助 问候 #ifndef VWLANDMARKTABLEMODEL_H #define VWLANDMARKTABLEMODEL_H #include <QSqlTableModel> class GraphicsPointLandmarkItem; class VWLandmarkTableModel : public QSql

我有一个从QSqlTableModel继承的类,它在调用submitAll()插槽之后,在调用insertPoint几次之后中断。这是代码

谢谢你的帮助

问候

#ifndef VWLANDMARKTABLEMODEL_H
#define VWLANDMARKTABLEMODEL_H

#include <QSqlTableModel>

class GraphicsPointLandmarkItem;

class VWLandmarkTableModel : public QSqlTableModel
{
    Q_OBJECT
public:
    enum Column {
        IdColumn=0,
        IdImageColumn=1,
        UsernameColumn=2,
        NameColumn=3,
        DefinitionColumn=4
    };

    VWLandmarkTableModel(QObject *parent=0);

    int idImage() const { return m_idImage; }
    QString username() const { return m_username; }
    void setIdImage(int idImage);
    void setUsername(const QString &username);
    virtual bool select();
    bool insertPoint(GraphicsPointLandmarkItem *item);
signals:
protected:
    virtual void setFilter(const QString &filter) 
        { QSqlTableModel::setFilter(filter); }
    virtual bool insertRowIntoTable(const QSqlRecord &values);
protected slots:
    void setDefaults(int row, QSqlRecord &r);
private:
    QString m_username;
    int m_idImage;
};

#endif // VWLANDMARKTABLEMODEL_H


#include "vwlandmarktablemodel.h"

#include <QtGui>
#include <QtSql>
#include <QtCore>

#include "graphicspointlandmarkitem.h"

VWLandmarkTableModel::VWLandmarkTableModel(QObject *parent)
    : QSqlTableModel(parent)
{ 
    setTable("vwLandmark");
    setEditStrategy(OnManualSubmit);

    connect(this, SIGNAL(primeInsert(int,QSqlRecord&)), 
        SLOT(setDefaults(int,QSqlRecord&)));
}

void VWLandmarkTableModel::setIdImage(int idImage)
{ m_idImage=idImage; }

void VWLandmarkTableModel::setUsername(const QString &username)
{ m_username=username; }

bool VWLandmarkTableModel::select()
{
    Q_ASSERT(!username().isEmpty());

    QString stmt="IdImage = %1 AND Username = '%2'";

    setFilter(stmt.arg(idImage()).arg(username()));
    return QSqlTableModel::select();
}

bool VWLandmarkTableModel::insertPoint(GraphicsPointLandmarkItem *item)
{
    QString text;
    QTextStream out(&text);
    int row=rowCount();
    bool ok;

    ok=insertRow(row); Q_ASSERT(ok);

    QModelIndex idx=index(row, DefinitionColumn);

    out<<*item;
    ok=setData(idx, text); 
    Q_ASSERT(ok);
    idx=index(row, NameColumn);
    ok=setData(idx, tr("New point landmark"));
    Q_ASSERT(ok);
    return ok;
}

bool VWLandmarkTableModel::insertRowIntoTable(const QSqlRecord &values)
{
    QString sql="EXEC InsertLandmark :IdImage,:Definition";
    QSqlQuery q;
    bool ok;

    ok=q.prepare(sql); Q_ASSERT(ok);
    q.bindValue(":IdImage", values.value("IdImage"));
    q.bindValue(":Definition", values.value("Definition"));
    q.setForwardOnly(true);
    if(!q.exec()) {
        setLastError(q.lastError());
        return false;
    }
    qDebug()<<"hola mundo";
    return true;
}

void VWLandmarkTableModel::setDefaults(int row, QSqlRecord &r)
{
    r.setValue("IdImage", idImage());
    r.setValue("Name", "Unnamed landmark");
    r.setValue("Username", username());
}
\ifndef VWLANDMARKTABLEMODEL\u H
#定义VWLANDMARKTABLEMODEL_H
#包括
类GraphicsPointLandmarkItem;
VWLandmarkTableModel类:公共QSqlTableModel
{
Q_对象
公众:
枚举列{
IdColumn=0,
IdImageColumn=1,
UsernameColumn=2,
NameColumn=3,
定义列=4
};
VWLandmarkTableModel(QObject*parent=0);
int idImage()常量{返回m_idImage;}
QString username()常量{return m_username;}
无效设置idImage(int idImage);
void setUsername(常量QString和username);
虚拟布尔选择();
布尔插入点(GraphicsPointLandmarkItem*item);
信号:
受保护的:
虚拟void setFilter(常量QString和filter)
{QSqlTableModel::setFilter(filter);}
虚拟bool insertRowIntoTable(常量QSqlRecord&value);
受保护插槽:
void setDefaults(int行、QSqlRecord&r);
私人:
QString m_用户名;
国际图像;
};
#endif//VWLANDMARKTABLEMODEL_H
#包括“vwlandmarktablemodel.h”
#包括
#包括
#包括
#包括“graphicspointlandmarkitem.h”
VWLandmarkTableModel::VWLandmarkTableModel(QObject*父对象)
:QSqlTableModel(父级)
{ 
可设置(“vwLandmark”);
setEditStrategy(OnManualSubmit);
连接(此,信号(primeInsert(int,QSqlRecord&)),
插槽(setDefaults(int,QSqlRecord&));
}
void VWLandmarkTableModel::setIdImage(intIDimage)
{m_idImage=idImage;}
void VWLandmarkTableModel::setUsername(常量QString和username)
{m_username=username;}
bool VWLandmarkTableModel::select()
{
Q_断言(!username().isEmpty());
QString stmt=“IdImage=%1和用户名='%2';
setFilter(stmt.arg(idImage()).arg(username());
返回QSqlTableModel::select();
}
bool VWLandmarkTableModel::insertPoint(GraphicsPointLandmarkItem*item)
{
QString文本;
QTextStream out(文本(&T);
int row=rowCount();
布尔ok;
ok=插入行(row);Q_断言(ok);
QModelIndex idx=索引(行,定义列);

out问题出在我的自定义选择中。调用setFilter()会导致无限调用循环

问题出在我的自定义选择中。调用setFilter()会导致无限调用循环