Criando-um-metodo-que-recebe-um-objeto-qualquer-e-faz-uma-insercaeo-em-uma-tabela-de-um-banco-de-dad: Difference between revisions

From Qt Wiki
Jump to navigation Jump to search
No edit summary
(Don't #include the module prefix)
 
(4 intermediate revisions by 2 users not shown)
Line 1: Line 1:
Como prometi no topico "Como Manipular uma Classe Qualquer?":http://forum.qt.io/viewthread/26452/, vou mostrar agora como fazer um metodo que recebe uma classe qualquer.
{{Cleanup | reason=Auto-imported from ExpressionEngine.}}


O objetivo em questao é receber um objeto qualquer e fazer um "insert" em um banco de dados (no caso usei o sqlite) a partir das propriedades do objeto.
Como prometi no topico [http://forum.qt.io/viewthread/26452/ Como Manipular uma Classe Qualquer?], vou mostrar agora como fazer um metodo que recebe uma classe qualquer.
 
O objetivo em questao é receber um objeto qualquer e fazer um "insert" em um banco de dados (no caso usei o sqlite) a partir das propriedades do objeto.


segue o código:
segue o código:


meu objeto &quot;C1&amp;quot;<br /><code><br />#ifndef C1_H<br />#define C1_H
meu objeto "C1"
<code>
#ifndef C1_H
#define C1_H


#include &lt;QObject&amp;gt;<br />#include &lt;QtScript/QScriptClass&amp;gt;
#include <QObject>
#include <QScriptClass>


class C1 : public QObject<br />{<br /> Q_OBJECT
class C1 : public QObject
{
Q_OBJECT


//aqui definiremos as propriedades do objeto e seus respectivos metodos de leitura, onde:<br />// Q_PROPERTY(&lt;tipo e nome da propriedade&amp;gt; READ &lt;nome funçao que retorna o valor da sua propriedade&amp;gt;)<br />// o &quot;READ&amp;quot; serve para especificar qual a funçao que retornara o valor da minha propriedade<br /> Q_PROPERTY(int x READ X)<br /> Q_PROPERTY(QString campo1 READ Campo1)<br /> Q_PROPERTY(int campo2 READ Campo2)<br /> Q_PROPERTY(QString parameters READ parameters)
//aqui definiremos as propriedades do objeto e seus respectivos metodos de leitura, onde:
// Q_PROPERTY(<tipo e nome da propriedade> READ <nome funçao que retorna o valor da sua propriedade>)
// o "READ" serve para especificar qual a funçao que retornara o valor da minha propriedade
Q_PROPERTY(int x READ X)
Q_PROPERTY(QString campo1 READ Campo1)
Q_PROPERTY(int campo2 READ Campo2)
Q_PROPERTY(QString parameters READ parameters)


public:<br /> explicit C1(QObject *parent = 0);
public:
explicit C1(QObject *parent = 0);


QString parameters()<br /> {<br />//aqui eu posso retornar os parametros a seguir:<br /> return &quot;table(c1);colums(campo1,campo2,x)&quot;;<br />//ou nada, indicando que todas as propriedades serao inseridas na tabela<br /> //return &quot;&quot;;<br /> }
QString parameters()
{
//aqui eu posso retornar os parametros a seguir:
return "table(c1);colums(campo1,campo2,x)";
//ou nada, indicando que todas as propriedades serao inseridas na tabela
//return "";
}


QString Campo1();//const;<br /> int Campo2();<br /> int X();
QString Campo1();//const;
int Campo2();
int X();


private:<br /> int x;<br />};
private:
int x;
};


#endif // C1_H<br /></code>
#endif // C1_H
</code>


arquivo cpp do meu objeto:<br /><code><br />#include &quot;c1.h&amp;quot;
arquivo cpp do meu objeto:
<code>
#include "c1.h"


C1::C1(QObject *parent) :<br /> QObject(parent)<br />{<br /> x=20;
C1::C1(QObject *parent) :
QObject(parent)
{
x=20;


//aqui, se preferirem indiquem o um nome para o objeto…<br />// no caso, estou usando ele para referenciar o nome da tabela<br />//se nao for informado o nome da tabela sera o mesmo da minha classe…<br /> // this-&gt;setObjectName(&quot;C1&amp;quot;);<br />}
//aqui, se preferirem indiquem o um nome para o objeto…
// no caso, estou usando ele para referenciar o nome da tabela
//se nao for informado o nome da tabela sera o mesmo da minha classe…
// this->setObjectName("C1");
}


QString C1::Campo1()<br />{<br /> return &quot;Rodrigo&amp;quot;;<br />}
QString C1::Campo1()
{
return "Rodrigo";
}


int C1::Campo2()<br />{<br /> return 3;<br />}
int C1::Campo2()
{
return 3;
}


int C1::X()<br />{<br /> return this-&gt;x;<br />}<br /></code>
int C1::X()
{
return this->x;
}
</code>


minha classe &quot;ConnectionDB&amp;quot;:<br /><code><br />#ifndef CONNECTIODB_H<br />#define CONNECTIODB_H
minha classe "ConnectionDB":
<code>
#ifndef CONNECTIODB_H
#define CONNECTIODB_H


#include &lt;QObject&amp;gt;<br />#include &lt;qsql.h&amp;gt;
#include <QObject>
#include <qsql.h>


class ConnectioDB : public QObject<br />{<br /> Q_OBJECT<br />public:<br /> explicit ConnectioDB(QObject *parent = 0);
class ConnectioDB : public QObject
{
Q_OBJECT
public:
explicit ConnectioDB(QObject *parent = 0);


//o metodo a seguir é responsavel por abrir uma conexao com o meu banco de dados<br /> static bool createConnection(QString plugin, bool memory ,QString connectionName,<br /> QString DBname,QString Hostname, QString user, QString pass);
//o metodo a seguir é responsavel por abrir uma conexao com o meu banco de dados
static bool createConnection(QString plugin, bool memory ,QString connectionName,
QString DBname,QString Hostname, QString user, QString pass);


static bool insert(QObject *obj,QString connectionName);<br />// static bool update(QObject *obj,QString connectionName);<br />// static bool remove(QObject *obj,QString connectionName);
static bool insert(QObject *obj,QString connectionName);
// static bool update(QObject *obj,QString connectionName);
// static bool remove(QObject *obj,QString connectionName);


signals:
signals:
Line 51: Line 108:
};
};


#endif // CONNECTIODB_H<br /></code>
#endif // CONNECTIODB_H
</code>


arquivo de codigo do meu &quot;ConnectionDB&amp;quot;
arquivo de codigo do meu "ConnectionDB"


<code><br />#include &quot;connectiodb.h&amp;quot;<br />#include &lt;QMessageBox&amp;gt;<br />#include &lt;QSqlDatabase&amp;gt;<br />#include &lt;QSqlError&amp;gt;<br />#include &lt;QSqlQuery&amp;gt;<br />#include &quot;QString&amp;quot;<br />#include &quot;QDebug&amp;quot;<br />#include &quot;QtGui&amp;quot;<br />#include &quot;QMetaObject&amp;quot;<br />#include &lt;QVariant&amp;gt;
<code>
#include "connectiodb.h"
#include <QMessageBox>
#include <QSqlDatabase>
#include <QSqlError>
#include <QSqlQuery>
#include "QString"
#include "QDebug"
#include "QtGui"
#include "QMetaObject"
#include <QVariant>


ConnectioDB::ConnectioDB(QObject '''parent) :<br /> QObject(parent)<br />{
ConnectioDB::ConnectioDB(QObject '''parent) :
<br />}
QObject(parent)
<br />bool ConnectioDB::createConnection(QString plugin, bool memory, QString connectionName, QString DBname, QString Hostname, QString user, QString pass)<br />{<br /> /'''<br /> Essa funçao abrira uma conexão, se for passado as seguintes informações:
{
 
}
 
bool ConnectioDB::createConnection(QString plugin, bool memory, QString connectionName, QString DBname, QString Hostname, QString user, QString pass)
{
/'''
Essa funçao abrira uma conexão, se for passado as seguintes informações:


plugin* - É informado o plugin referente ao banco de dados que sera feito a conexão.
plugin* - É informado o plugin referente ao banco de dados que sera feito a conexão.


local* - Apenas para o QSQLITE onde pode assumir os valores &quot;memory&amp;quot; ou &quot;null&amp;quot;
local* - Apenas para o QSQLITE onde pode assumir os valores "memory" ou "null"


connectionname* - Nome da conexão que sera criada
connectionname* - Nome da conexão que sera criada
Line 73: Line 148:
pass - Senha, necessario quando a conexao requer autenticaçao.
pass - Senha, necessario quando a conexao requer autenticaçao.


OBS: os parametros descritos com o simbolo * indica que o parametro é obrigatorio. Demais<br /> pode ser informado o valor null para indicar que nao sera usado.
OBS: os parametros descritos com o simbolo * indica que o parametro é obrigatorio. Demais
pode ser informado o valor null para indicar que nao sera usado.


'''falta descrever alguns parametros….
'''falta descrever alguns parametros….
<br />'''/<br /> QSqlDatabase db = QSqlDatabase::addDatabase(plugin, connectionName);<br /> if(!memory)<br /> {<br /> if(!Hostname.isEmpty())<br /> db.setHostName(Hostname);<br /> if(!user.isEmpty())<br /> db.setUserName(user);<br /> if(!pass.isEmpty())<br /> db.setPassword(pass);<br /> if(!DBname.isEmpty())<br /> db.setDatabaseName(DBname);<br /> }<br /> else db.setDatabaseName(&quot;:memory:&quot;);


if (!db.open())<br /> {<br /> QMessageBox::critical(0, qApp-&gt;tr(&quot;Cannot open database&amp;quot;),<br /> qApp-&gt;tr(&quot;Unable to establish a database connection.&quot;<br /> &quot;This example needs SQLite support. Please read &quot;<br /> &quot;the Qt SQL driver documentation for information how &quot;<br /> &quot;to build it.&quot;<br /> &quot;Click Cancel to exit.&quot;), QMessageBox::Cancel);<br /> qDebug()&lt;&lt;&quot;Create Connection&amp;quot;&lt;&lt;connectionName&amp;lt;&lt;false&amp;lt;&lt;&quot;- DATA BASE:&quot;&lt;&lt;DBname;<br /> return false;<br /> }
*/
QSqlDatabase db = QSqlDatabase::addDatabase(plugin, connectionName);
if(!memory)
{
if(!Hostname.isEmpty())
db.setHostName(Hostname);
if(!user.isEmpty())
db.setUserName(user);
if(!pass.isEmpty())
db.setPassword(pass);
if(!DBname.isEmpty())
db.setDatabaseName(DBname);
}
else db.setDatabaseName(":memory:");
 
if (!db.open())
{
QMessageBox::critical(0, qApp->tr("Cannot open database"),
qApp->tr("Unable to establish a database connection."
"This example needs SQLite support. Please read "
"the Qt SQL driver documentation for information how "
"to build it."
"Click Cancel to exit."), QMessageBox::Cancel);
qDebug()<<"Create Connection"<<connectionName<<false<<"- DATA BASE:"<<DBname;
return false;
}
 
qDebug()<<"Create Connection"<<connectionName<<true<<"- DATA BASE:"<<DBname;
return true;
}
 
bool ConnectioDB::insert(QObject '''obj, QString connectionName)
{
 
const QMetaObject''' metaObject = obj->metaObject();
QString colums="";
QString table=obj->objectName();//estou usando o nome do objeto para referenciar o nome da tabela
QString values="";
//processa os parametros
 
//pega a propriedade que possui o nome "parameters"
// QVariant v = obj->property(metaObject->property(metaObject->indexOfProperty("parameters")).name());
QVariant v = obj->property("parameters");//retorna um valor a partir do nome da propriedade


qDebug()&lt;&lt;&quot;Create Connection&amp;quot;&lt;&lt;connectionName&amp;lt;&lt;true&amp;lt;&lt;&quot;- DATA BASE:&quot;&lt;&lt;DBname;<br /> return true;<br />}
//leitura dos parametros
QString parameters=v.toString();
//separa e joga em uma lista
QStringList list=parameters.split(";");


bool ConnectioDB::insert(QObject '''obj, QString connectionName)<br />{
for (int i = 0; i < list.size(); +''i)
<br /> const QMetaObject''' metaObject = obj-&gt;metaObject();<br /> QString colums=&quot;&quot;;<br /> QString table=obj-&gt;objectName();//estou usando o nome do objeto para referenciar o nome da tabela<br /> QString values=&quot;&quot;;<br /> //processa os parametros
{
QString str=list.at(i).toLocal8Bit().constData();
if(str.contains("colums"))
{
// str.remove("colums(");
str.remove("colums");
// str.remove(")");
colums=str;
qDebug()<<"colums="<<colums;
}else if(str.contains("table"))
{
str.remove("table(");
str.remove(")");
table=str;
qDebug()<<"table="<<table;
}
}


//pega a propriedade que possui o nome &quot;parameters&amp;quot;<br /> // QVariant v = obj-&gt;property(metaObject-&gt;property(metaObject-&gt;indexOfProperty(&quot;parameters&amp;quot;)).name());<br /> QVariant v = obj-&gt;property(&quot;parameters&amp;quot;);//retorna um valor a partir do nome da propriedade
//reunindo os valores a serem inseridos
if(colums.isEmpty())
{
for(int i = metaObject->propertyOffset(); i < metaObject->propertyCount();i)
{


//leitura dos parametros<br /> QString parameters=v.toString();<br /> //separa e joga em uma lista<br /> QStringList list=parameters.split(&quot;;&quot;);
QVariant v = obj->property(metaObject->property(i).name());
if(!QString(metaObject->property(i).name()).contains("parameters",Qt::CaseInsensitive))//remove "parameters" da inserçao
{
if(!colums.isEmpty())
colums''=",";
colums+=QString::fromLatin1(metaObject->property(i).name()).toLower();


for (int i = 0; i &lt; list.size(); +''i)<br /> {<br /> QString str=list.at(i).toLocal8Bit().constData();<br /> if(str.contains(&quot;colums&amp;quot;))<br /> {<br /> // str.remove(&quot;colums(&quot;);<br /> str.remove(&quot;colums&amp;quot;);<br /> // str.remove(&quot;)&quot;);<br /> colums=str;<br /> qDebug()&lt;&lt;&quot;colums=&quot;&amp;lt;&amp;lt;colums;<br /> }else if(str.contains(&quot;table&amp;quot;))<br /> {<br /> str.remove(&quot;table(&quot;);<br /> str.remove(&quot;)&quot;);<br /> table=str;<br /> qDebug()&lt;&lt;&quot;table=&quot;&amp;lt;&amp;lt;table;<br /> }<br /> }
if(colums.contains(QString::fromLatin1(metaObject->property(i).name()).toLower()))
<br /> //reunindo os valores a serem inseridos<br /> if(colums.isEmpty())<br /> {<br /> for(int i = metaObject-&amp;gt;propertyOffset(); i &amp;lt; metaObject-&amp;gt;propertyCount();i)<br /> {
{
<br /> QVariant v = obj-&amp;gt;property(metaObject-&amp;gt;property(i).name());<br /> if(!QString(metaObject-&amp;gt;property(i).name()).contains(&quot;parameters&amp;quot;,Qt::CaseInsensitive))//remove &quot;parameters&amp;quot; da inserçao<br /> {<br /> if(!colums.isEmpty())<br /> colums''=&quot;,&quot;;<br /> colums+=QString::fromLatin1(metaObject-&gt;property(i).name()).toLower();
if(!values.isEmpty()) values+=",";
values+="'"''v.toString()''"'";
}
}
}
colums="("''colums''")";
} else
{
QString aux=colums;
aux.remove("(");
aux.remove(")");
QStringList columsList=aux.split(",");


if(colums.contains(QString::fromLatin1(metaObject-&gt;property(i).name()).toLower()))<br /> {<br /> if(!values.isEmpty()) values+=&quot;,&quot;;<br /> values+=&quot;'&quot;''v.toString()''&quot;'&quot;;<br /> }<br /> }<br /> }<br /> colums=&quot;(&quot;''colums''&quot;)&quot;;<br /> } else<br /> {<br /> QString aux=colums;<br /> aux.remove(&quot;(&quot;);<br /> aux.remove(&quot;)&quot;);<br /> QStringList columsList=aux.split(&quot;,&quot;);
for (int i = 0; i < columsList.size(); +''i)
{


for (int i = 0; i &lt; columsList.size(); +''i)<br /> {
// QVariant v2 = obj->property(metaObject->property(metaObject->indexOfProperty(QString(columsList.at(i).toLocal8Bit()).toAscii())).name());
<br /> // QVariant v2 = obj-&gt;property(metaObject-&gt;property(metaObject-&gt;indexOfProperty(QString(columsList.at(i).toLocal8Bit()).toAscii())).name());<br />QVariant v2 = obj-&gt;property(QString(columsList.at(i).toLocal8Bit()).toAscii());<br /> if(!values.isEmpty()) values''=&quot;,&quot;;<br /> values+=&quot;'&quot;''v2.toString()''&quot;'&quot;;<br /> }<br /> }
QVariant v2 = obj->property(QString(columsList.at(i).toLocal8Bit()).toAscii());
if(!values.isEmpty()) values''=",";
values+="'"''v2.toString()''"'";
}
}


//faz a inserçao no banco de dados<br /> QSqlQuery *query=new QSqlQuery(connectionName,QSqlDatabase::database(connectionName));<br /> qDebug() &lt;&lt;&quot;values =&quot;&lt;&lt;values&amp;lt;&lt;&quot;colums =&quot;&lt;&lt;colums&amp;lt;&lt;query-&gt;exec&amp;amp;#40;&quot;INSERT INTO &quot;''table+colums''&quot;VALUES (&amp;quot;+values+&amp;quot;&amp;amp;#41;;&amp;quot;);<br />}<br /></code>
//faz a inserçao no banco de dados
QSqlQuery *query=new QSqlQuery(connectionName,QSqlDatabase::database(connectionName));
qDebug() <<"values ="<<values<<"colums ="<<colums<<query->exec("INSERT INTO "''table+colums''"VALUES ("+values+");");
}
</code>


meu arquivo main:
meu arquivo main:


<code><br />#include &quot;mainwindow.h&amp;quot;<br />#include &lt;QApplication&amp;gt;<br />#include &lt;QDebug&amp;gt;<br />#include &lt;c1.h&amp;gt;<br />#include &lt;connectiodb.h&amp;gt;<br />#include &lt;QSqlQuery&amp;gt;
<code>
#include "mainwindow.h"
#include <QApplication>
#include <QDebug>
#include <c1.h>
#include <connectiodb.h>
#include <QSqlQuery>


int main(int argc, char *argv[])<br />{<br /> C1 *c1 = new C1;<br /> ConnectioDB::createConnection(&quot;QSQLITE&amp;quot;,false,&quot;meubd&amp;quot;,&quot;teste.db&amp;quot;,NULL,NULL,NULL);<br /> QSqlQuery *query=new QSqlQuery(&quot;meubd&amp;quot;,QSqlDatabase::database(&quot;meubd&amp;quot;));<br />// qDebug() &lt;&lt;query-&gt;exec&amp;amp;#40;&quot;CREATE TABLE C1 ( &quot;<br />// &quot;cod INTEGER PRIMARY KEY&amp;quot;<br />// &quot;NOT NULL, &quot;<br />// &quot;campo1 VARCHAR( 128 &amp;#41;, &quot;<br />// &quot;campo2 INT, &quot;<br />// &quot;x INT &quot;<br />// &quot;);&quot;);<br /> c1-&gt;setObjectName(&quot;c1&amp;quot;);<br /> ConnectioDB::insert(c1,&quot;meubd&amp;quot;);<br /> return 0;<br />}<br /></code>
int main(int argc, char *argv[])
{
C1 *c1 = new C1;
ConnectioDB::createConnection("QSQLITE",false,"meubd","teste.db",NULL,NULL,NULL);
QSqlQuery *query=new QSqlQuery("meubd",QSqlDatabase::database("meubd"));
// qDebug() <<query->exec("CREATE TABLE C1 ( "
// "cod INTEGER PRIMARY KEY"
// "NOT NULL, "
// "campo1 VARCHAR( 128 ), "
// "campo2 INT, "
// "x INT "
// ");");
c1->setObjectName("c1");
ConnectioDB::insert(c1,"meubd");
return 0;
}
</code>


é isso, próximo post vou mostrar como escrever em um objeto qualquer fazendo um metodo que busca um objeto em uma tabela.
é isso, próximo post vou mostrar como escrever em um objeto qualquer fazendo um metodo que busca um objeto em uma tabela.

Latest revision as of 13:23, 27 April 2015

This article may require cleanup to meet the Qt Wiki's quality standards. Reason: Auto-imported from ExpressionEngine.
Please improve this article if you can. Remove the {{cleanup}} tag and add this page to Updated pages list after it's clean.

Como prometi no topico Como Manipular uma Classe Qualquer?, vou mostrar agora como fazer um metodo que recebe uma classe qualquer.

O objetivo em questao é receber um objeto qualquer e fazer um "insert" em um banco de dados (no caso usei o sqlite) a partir das propriedades do objeto.

segue o código:

meu objeto "C1"

#ifndef C1_H
#define C1_H

#include <QObject>
#include <QScriptClass>

class C1 : public QObject
{
 Q_OBJECT

//aqui definiremos as propriedades do objeto e seus respectivos metodos de leitura, onde:
// Q_PROPERTY(<tipo e nome da propriedade> READ <nome funçao que retorna o valor da sua propriedade>)
// o "READ" serve para especificar qual a funçao que retornara o valor da minha propriedade
 Q_PROPERTY(int x READ X)
 Q_PROPERTY(QString campo1 READ Campo1)
 Q_PROPERTY(int campo2 READ Campo2)
 Q_PROPERTY(QString parameters READ parameters)

public:
 explicit C1(QObject *parent = 0);

QString parameters()
 {
//aqui eu posso retornar os parametros a seguir:
 return "table(c1);colums(campo1,campo2,x)";
//ou nada, indicando que todas as propriedades serao inseridas na tabela
 //return "";
 }

QString Campo1();//const;
 int Campo2();
 int X();

private:
 int x;
};

#endif // C1_H

arquivo cpp do meu objeto:

#include "c1.h"

C1::C1(QObject *parent) :
 QObject(parent)
{
 x=20;

//aqui, se preferirem indiquem o um nome para o objeto…
// no caso, estou usando ele para referenciar o nome da tabela
//se nao for informado o nome da tabela sera o mesmo da minha classe…
 // this->setObjectName("C1");
}

QString C1::Campo1()
{
 return "Rodrigo";
}

int C1::Campo2()
{
 return 3;
}

int C1::X()
{
 return this->x;
}

minha classe "ConnectionDB":

#ifndef CONNECTIODB_H
#define CONNECTIODB_H

#include <QObject>
#include <qsql.h>

class ConnectioDB : public QObject
{
 Q_OBJECT
public:
 explicit ConnectioDB(QObject *parent = 0);

//o metodo a seguir é responsavel por abrir uma conexao com o meu banco de dados
 static bool createConnection(QString plugin, bool memory ,QString connectionName,
 QString DBname,QString Hostname, QString user, QString pass);

static bool insert(QObject *obj,QString connectionName);
// static bool update(QObject *obj,QString connectionName);
// static bool remove(QObject *obj,QString connectionName);

signals:

public slots:

};

#endif // CONNECTIODB_H

arquivo de codigo do meu "ConnectionDB"

#include "connectiodb.h"
#include <QMessageBox>
#include <QSqlDatabase>
#include <QSqlError>
#include <QSqlQuery>
#include "QString"
#include "QDebug"
#include "QtGui"
#include "QMetaObject"
#include <QVariant>

ConnectioDB::ConnectioDB(QObject '''parent) :
 QObject(parent)
{

}

bool ConnectioDB::createConnection(QString plugin, bool memory, QString connectionName, QString DBname, QString Hostname, QString user, QString pass)
{
 /'''
 Essa funçao abrira uma conexão, se for passado as seguintes informações:

plugin* - É informado o plugin referente ao banco de dados que sera feito a conexão.

local* - Apenas para o QSQLITE onde pode assumir os valores "memory" ou "null"

connectionname* - Nome da conexão que sera criada

Hostname - Local onde esta o servidor. Desnecessario quando o plugin for o QSQLITE

user - Usuário, necessario quando a conexao requer autenticaçao.

pass - Senha, necessario quando a conexao requer autenticaçao.

OBS: os parametros descritos com o simbolo * indica que o parametro é obrigatorio. Demais
 pode ser informado o valor null para indicar que nao sera usado.

'''falta descrever alguns parametros.

*/
 QSqlDatabase db = QSqlDatabase::addDatabase(plugin, connectionName);
 if(!memory)
 {
 if(!Hostname.isEmpty())
 db.setHostName(Hostname);
 if(!user.isEmpty())
 db.setUserName(user);
 if(!pass.isEmpty())
 db.setPassword(pass);
 if(!DBname.isEmpty())
 db.setDatabaseName(DBname);
 }
 else db.setDatabaseName(":memory:");

if (!db.open())
 {
 QMessageBox::critical(0, qApp->tr("Cannot open database"),
 qApp->tr("Unable to establish a database connection."
 "This example needs SQLite support. Please read "
 "the Qt SQL driver documentation for information how "
 "to build it."
 "Click Cancel to exit."), QMessageBox::Cancel);
 qDebug()<<"Create Connection"<<connectionName<<false<<"- DATA BASE:"<<DBname;
 return false;
 }

qDebug()<<"Create Connection"<<connectionName<<true<<"- DATA BASE:"<<DBname;
 return true;
}

bool ConnectioDB::insert(QObject '''obj, QString connectionName)
{

 const QMetaObject''' metaObject = obj->metaObject();
 QString colums="";
 QString table=obj->objectName();//estou usando o nome do objeto para referenciar o nome da tabela
 QString values="";
 //processa os parametros

//pega a propriedade que possui o nome "parameters"
 // QVariant v = obj->property(metaObject->property(metaObject->indexOfProperty("parameters")).name());
 QVariant v = obj->property("parameters");//retorna um valor a partir do nome da propriedade

//leitura dos parametros
 QString parameters=v.toString();
 //separa e joga em uma lista
 QStringList list=parameters.split(";");

for (int i = 0; i < list.size(); +''i)
 {
 QString str=list.at(i).toLocal8Bit().constData();
 if(str.contains("colums"))
 {
 // str.remove("colums(");
 str.remove("colums");
 // str.remove(")");
 colums=str;
 qDebug()<<"colums="<<colums;
 }else if(str.contains("table"))
 {
 str.remove("table(");
 str.remove(")");
 table=str;
 qDebug()<<"table="<<table;
 }
 }

 //reunindo os valores a serem inseridos
 if(colums.isEmpty())
 {
 for(int i = metaObject->propertyOffset(); i < metaObject->propertyCount();i)
 {

 QVariant v = obj->property(metaObject->property(i).name());
 if(!QString(metaObject->property(i).name()).contains("parameters",Qt::CaseInsensitive))//remove "parameters" da inserçao
 {
 if(!colums.isEmpty())
 colums''=",";
 colums+=QString::fromLatin1(metaObject->property(i).name()).toLower();

if(colums.contains(QString::fromLatin1(metaObject->property(i).name()).toLower()))
 {
 if(!values.isEmpty()) values+=",";
 values+="'"''v.toString()''"'";
 }
 }
 }
 colums="("''colums''")";
 } else
 {
 QString aux=colums;
 aux.remove("(");
 aux.remove(")");
 QStringList columsList=aux.split(",");

for (int i = 0; i < columsList.size(); +''i)
 {

 // QVariant v2 = obj->property(metaObject->property(metaObject->indexOfProperty(QString(columsList.at(i).toLocal8Bit()).toAscii())).name());
QVariant v2 = obj->property(QString(columsList.at(i).toLocal8Bit()).toAscii());
 if(!values.isEmpty()) values''=",";
 values+="'"''v2.toString()''"'";
 }
 }

//faz a inserçao no banco de dados
 QSqlQuery *query=new QSqlQuery(connectionName,QSqlDatabase::database(connectionName));
 qDebug() <<"values ="<<values<<"colums ="<<colums<<query->exec("INSERT INTO "''table+colums''"VALUES ("+values+");");
}

meu arquivo main:

#include "mainwindow.h"
#include <QApplication>
#include <QDebug>
#include <c1.h>
#include <connectiodb.h>
#include <QSqlQuery>

int main(int argc, char *argv[])
{
 C1 *c1 = new C1;
 ConnectioDB::createConnection("QSQLITE",false,"meubd","teste.db",NULL,NULL,NULL);
 QSqlQuery *query=new QSqlQuery("meubd",QSqlDatabase::database("meubd"));
// qDebug() <<query->exec("CREATE TABLE C1 ( "
// "cod INTEGER PRIMARY KEY"
// "NOT NULL, "
// "campo1 VARCHAR( 128 ), "
// "campo2 INT, "
// "x INT "
// ");");
 c1->setObjectName("c1");
 ConnectioDB::insert(c1,"meubd");
 return 0;
}

é isso, próximo post vou mostrar como escrever em um objeto qualquer fazendo um metodo que busca um objeto em uma tabela.