[Qt-interest] Error in QSqlTableModel inherited table.

Bill KING bill.king at trolltech.com
Wed Jan 28 23:14:11 CET 2009


setEditStrategy(OnManualSubmit); <- there are issues (mostly to do with
keeping edits in line internally and the juggling necessary to do so)
with this that are known about. I recommend against using OnManualSubmit
until we've had time to go through it with a fine tooth comb/reworked
the code.

Jesús Fernández wrote:
> Hi!
>
> I have this class that inherits from QSqlTableModel and it brokes
> after calling the submitAll() slot, after calling insertPoint some
> times. Here is the code.
>
> Thanks for the help.
>
> Regards.
>
> HEADER
>
>     #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
>
>
> SOURCE
>
>     #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());
>
>     }
>
>
>
> ------------------------------------------------------------------------
>
> _______________________________________________
> Qt-interest mailing list
> Qt-interest at trolltech.com
> http://lists.trolltech.com/mailman/listinfo/qt-interest
>   


-- 
Bill King, Software Engineer
Qt Software, Nokia Pty Ltd
Brisbane Office




More information about the Qt-interest-old mailing list