#include <vector> oder qt4 QVector die Wahl..

Alles rund um die Programmierung mit Qt
Antworten
patrik08
Beiträge: 746
Registriert: 27. Februar 2006 10:48
Wohnort: DE Freiburg

#include <vector> oder qt4 QVector die Wahl..

Beitrag von patrik08 »

meine v_fieldata.size() ... ist immer leer warum?
unten im qt code..

habe ich was nicht begriffen mit dem QVector...
oder gibt es bessere beispiele als qt assistent oder die classe QSqlResultPrivate von sql qt driver?
/* Note: All the functions in this class are reentrant. */

mit php fulle ich ein multidimensionales array im nu...mit

php code

Code: Alles auswählen

$lang2 = array(
"1" => array (
"numero" => "2", 
"languagename" => "Deutsch", 
"browsername" => "de"
));
doch im c++ geht es bei mir nur mit #include <vector>
so wie http://ciz.ch/svnciz/c++guida/CAP21.LST

qt code

Code: Alles auswählen


/*  header  file  */
#include <QtCore/qvariant.h>
#include <QtCore/qvector.h>

/* Note: All the functions in this class are reentrant. */
/* vor der classe  */
template <typename T> class QVector;

class SQLFirebird
{
        bool open();
        bool close();
        ....... ecc

protected:
        QVector<QString> v_fieldname;
        QVector<QString> v_fieldata;
        QString sql_log_file;

}

/*  source file  */

SQLFirebird::SQLFirebird()
{
    v_fieldname.clear();
    v_fieldata.clear();
}

/* incomming from external callback  */
void SQLFirebird::loadResult(int argc, char **argv, char **azColName)
{ 
    int i;
    for(i=0; i<argc; i++){
      /* QString  field_data = QString( "%1__%2" ).arg(azColName[i] , argv[i] ? argv[i] : "NULL");  */
     v_fieldname.insert(i+1,azColName[i]);
     v_fieldata.insert(i+1,argv[i] ? argv[i] : "NULL");
    }
}
Tarek
Beiträge: 46
Registriert: 3. Oktober 2005 14:29
Kontaktdaten:

Beitrag von Tarek »

Ich empfehle dir mit der Problembeschreibung mal einen neuen Anlauf zu machen...
Ich persönlich versteh nur Bahnhof. :?
patrik08
Beiträge: 746
Registriert: 27. Februar 2006 10:48
Wohnort: DE Freiburg

Beitrag von patrik08 »

ich habe eine externe "callback" funktion die sollte einen
QVector in der classeA auffuellen
wie ( http://www.adp-gmbh.ch/sqlite/wrapper.html
std::vector<std::string> fields_; )

jedoch mit dem QVector ...
in der schleife von classeA sehe ich das daten hinein kommen.... sql_log
aber es werden keine daten vom QVector registriert. und der wert von
v_fieldata.size() ist immer 0 (NULL)
michams
Beiträge: 56
Registriert: 14. November 2005 18:24

Re: #include <vector> oder qt4 QVector die Wahl..

Beitrag von michams »

patrik08 hat geschrieben:

Code: Alles auswählen

    for(i=0; i<argc; i++){
      /* QString  field_data = QString( "%1__%2" ).arg(azColName[i] , argv[i] ? argv[i] : "NULL");  */
     v_fieldname.insert(i+1,azColName[i]);
     v_fieldata.insert(i+1,argv[i] ? argv[i] : "NULL");
    }
Du schreibst in Elemente des Array, die es gar nicht gibt, da dein QVector ja bei der Initialisierung ge-clear-ed wurde. Insert fügt verwirrenderweise keine neuen Elemente ein, sondern überschreibt nur vorhandene! Entweder du machst vor der Schleife ein v_fieldname.resize(i) oder noch besser, du benutzt push_back statt insert.

Ob std::vector oder QVector ist prinzipiell egal. Ich benutze lieber std::vector, da man mit VC2005 dort komplett hinein debuggen kann, in den QVector eben nicht, wobei man QVector auch in einen std::vector konvertieren kann. Man sollte allerdings konsequent bei einer Methode bleiben und nicht beides mischen.
patrik08
Beiträge: 746
Registriert: 27. Februar 2006 10:48
Wohnort: DE Freiburg

Beitrag von patrik08 »

Gut.... ich habe nun den konvensionellen sdt vector verstanden....

Das Grosse dilemma ist einfach das viele sql libs solche "callback" funktionen haben ....

dieses bedeutet das man aus der Klasse raus muss....


funktion von der klasse(..,..,(void) this ,..,..) {

}


Code: Alles auswählen

static int callbacks( classname , int argc, char **argv, char **azColName) 
{
/*  die einziege moeglichkeit ist  die "void *NotUsed" um an das objekt rankommen  */
Objekt <reinterpret_cast<objekt>classname
und mit Objekt weiter zuruck zur klasse ....

}
Doch Mac bringt das <reinterpret_cast<objekt> nicht zustande auf QT4

da ich nur einen dump will habe ich es einfach so gemacht..

Code: Alles auswählen


static int callbacks( void *NotUsed , int argc, char **argv, char **azColName) {
     int i;
     QString workfile = QString( "%1/.cache/label.xml" ).arg( QDir::homePath());
     QString workdir = QString( "%1/.cache/" ).arg( QDir::homePath());
     QDir dir(workdir);
     if (dir.mkpath(workdir)) {
     /* make dir if not exist! */
     }         
     QFile f( workfile );
     QString  field , data;
     if ( f.open( QFile::Append | QFile::Text ) )
	 {
        QTextStream sw( &f );
        QString timing = QString( "bench=\"%1\" " ).arg(time( NULL ));
        sw << "<bench_unixtime " << timing << "/>\n";
        sw << "<row>\n";
        for(i=0; i<argc; i++){  /* azColName[i]  */
         data = QString( "data=\"%1\" " ).arg(argv[i] ? argv[i] : "NULL"); 
         field = QString( "field=\"%1\" " ).arg(azColName[i]);
         sw << " <rows id=\"" << i << "\" " << field << data << "/>\n ";
        }
        sw << "</row>\n";
		f.close();
	}
      return 0;
  /* genau eine sekunde fuer 1200 zeilen  */
}

und das xml cache_file in der classe aufgreifen ... einen xml root geben und fertig!
dan da ich xslt im programm habe kann ich so auf excel exportieren text ..
csv unsw.... gute Idee vom projekt http://www.nongnu.org/anarchdb/
dieses ding exportiert dbs in viele formate .... doch nun begreife ich warum es mit Wx gemacht ist und nicht mit QT..

Schade das QT die sql nur im gui zeigen und keine moeglichkeit hat fuer einen dump export oder was der gleichen.....
Antworten