PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : QMap in Tabelle auslesen



ogre
18-01-2006, 15:40
Hallo Leute,
ich versuche seit geraumer Zeit Eine QMap in einer Tabelle auszulesen, funktioniert nur leider nicht.
Bitte um Hilfe

Vielen Dank schon im voraus
ma


//main.cpp
#include <QtGui>
#include "read_1.h"

int main(int argc, char *argv[])
{
QApplication a(argc, argv);

Read_1 mainWidget;
mainWidget.setGeometry(50,50,200,500);
mainWidget.show();
return a.exec();
}


//Read_1.cpp
#include <QTableWidgetItem>
#include <QTableWidget>
#include <QMap>
#include <QMapIterator>
#include "read_1.h"

QMap<QString, int> map;
QMapIterator<QString, int> i(map);

static const int NAME_COLUMN = 0;
static const int KEY_COLUMN = 1;

Read_1::Read_1(QWidget *parent, Qt::WFlags flags) : QMainWindow(parent, flags)
{
map.insert("Max Mustermann", 1);
map.insert("Hanne Musterfrau", 2);
map.insert("Hilde Musterkind", 3);

QStringList headerLables;
headerLables << "Name"<< "Key";

tableWidget = new QTableWidget(this);
tableWidget->setRowCount(10);
tableWidget->setColumnCount( headerLables.count() );
tableWidget->setHorizontalHeaderLabels( headerLables );

int a=1;
// Diese Schleife wird ignoriert :confused:
while (i.hasNext()) {
i.next();
QTableWidgetItem *keyCell = new QTableWidgetItem( i.key() );
QTableWidgetItem *nameCell = new QTableWidgetItem(i.value() );
tableWidget->setItem(a, 1, nameCell);
tableWidget->setItem(a, 2, keyCell);
a++;
qDebug()<<i.key();
qDebug()<<i.value();
}


setCentralWidget( tableWidget );
}


Read_1::~Read_1(){}


//Read_1.h
#ifndef READ_1_H
#define READ_1_H

#include <QtGui>
class Read_1 : public QMainWindow
{
Q_OBJECT

public:
Read_1(QWidget *parent = 0, Qt::WFlags flags = 0);
QTableWidget *tableWidget;
QTableWidgetItem * item;
~Read_1();
};
#endif // READ_1_H

anda_skoa
18-01-2006, 16:59
Erzeug mal den Iterator erst wenn du ihn brauchst.

Ciao,
_

ogre
18-01-2006, 17:14
Alles klar :eek:
vielen dank :D

ogre
19-01-2006, 19:21
hallo,
ich habe noch ein problem mit meiner map. ich möchte sie in einer abgeleiteten klasse auslesen, aber die schleife wir wieder ignoriert.
was kann ich tun???


QMapIterator<double, double> i (re.map);

while( i.hasNext() ){ // diese schleife wird ignoriert (wie oben)
i.next();
qDebug() << i.key();
qDebug() << i.value();

}

RHBaum
20-01-2006, 10:36
Welche Version von der QT hast du denn ?

Ich glaube mal gelesen zu haben das sich bei der 4.1 er Trolltech nu noch mehr ans design der STL container annaehert ....

Ich kenn mich den QT containern ned so aus, aber mit der STL sehen iteratorschleifen schon anders aus ....

Aber laut doku sollte deine schleife schon funktionieren ....

Sicher das in der Map was drinnen ist, und du nicht irgendwo statt ner kopie irgwendwo nur ne leere map erstellst ?

was gibt re.map.size() zurueck ?

Ciao ...

anda_skoa
20-01-2006, 16:07
hallo,
ich habe noch ein problem mit meiner map. ich möchte sie in einer abgeleiteten klasse auslesen, aber die schleife wir wieder ignoriert.
was kann ich tun???

Prüfe mal vor dem Erzeugen des Iterators wieviele Elemente in der Map sind und geh sicher, daß zwischen Iteratorerzeugung und Schleife nirgendwo anders die Map geändert wird.

Ciao,
_

ogre
21-01-2006, 11:14
Hi Leute,

Ihr hattet Recht, die Map ist leer??? Leider weiß ich auch nicht warum, vielleicht habt Ihr je eine Idee:


// main.cpp
#include <QtGui>
#include "maptest2.h"

int main(int argc, char *argv[])
{
QApplication a(argc, argv);
MapTest2 w;
return a.exec();
}

//maptest2.h
#ifndef MAPTEST2_H
#define MAPTEST2_H

#include <QtGui>

typedef QMap<int, int> Mappe;

class MapTest2 : public QMainWindow
{
public:
MapTest2(QWidget *parent = 0);
Mappe map;
};

#endif // MAPTEST2_H


//maptest2.cpp
#include <QtGui>
#include "maptest2.h"
#include "pars.h"


MapTest2::MapTest2(QWidget *parent)
{
map.insert(1,1);
map.insert(2,2);
map.insert(3,3);

qDebug(">>> First: %d", map.count() ); // >>> First: 3 also die Map is mit Daten gefüllt


Pars *p = new Pars;
}

//pars.h
#include <QtGui>
#include "maptest2.h"

class Pars
{
public:
Pars();
Mappe map_2;
~Pars();
};

//pars.cpp
#include <QtGui>
#include "pars.h"

Pars::Pars()
{
qDebug(">>> Counter von Map 2: %d", map_2.count() ); // Ausgabe von >>> Counter von Map 2: 0
}


der debugger
gibt aus:

>>> First: 3 also die Map is mit Daten gefüllt

aber hier ist sie leer :confused:
>>> Counter von Map 2: 0

anda_skoa
21-01-2006, 13:12
map_2 wurde ja auch nicht gefüllt, woher soll sie daher Werte haben?

MapTest.map ist ja eine ganz andere Variable.

Dir ist schon klar, daß zwei Variablen zwei verschiedene Speicherbereiche sind, oder?

Ciao,
_

P.S.: beim Einbringen von Codestücken kann man mit Hilfe der [ code ] tags eine schönere Formatierung erreichen

ogre
22-01-2006, 16:25
Hallo,

wie komm ich dann an die map (die erste map) ran und sie anzeigen kann.

thx

anda_skoa
23-01-2006, 14:14
Zum Beispiel dem zweiten Kontruktor übergeben oder mit einer Methode darauf zugreifen.

Wie auf jede andere Variable auch, da ist ansich wenig Unterschied

Ciao,
_

ogre
23-01-2006, 15:21
hallo anda_skoa,

ich muss dich jetzt noch mal nerven, ich habe irgendwie schon seit mehreren tagen eine denkblockade. :(

Ich habe hier noch mal ein stück code, ich weiß hierbei nicht, wie ich die klasse pars ( den kontruktor) aufrufen soll.

thx



// MapTest2.h
#include <QtGui>
typedef QMap<int, int> Mappe;

class MapTest2 : public QMainWindow
{
public:
MapTest2(QWidget *parent = 0);
Mappe map;
};




// MapTest2.cpp
#include <QtGui>
#include "maptest2.h"

MapTest2::MapTest2(QWidget *parent)
{
map.insert(1,1);
map.insert(2,2);
map.insert(3,3);

qDebug(">>> First: %d", map.count() );
}



//Pars.h
#include <QtGui>
#include "maptest2.h"

class Pars: public MapTest2
{
public:
Pars();
MapTest2 mt;
};



//Pars.cpp
#include <QtGui>
#include "pars.h"

Pars::Pars()
{
qDebug(">>> Second: %d", mt.map.count() );
}

anda_skoa
24-01-2006, 16:36
Ich weiß ja nicht was du machen willst, aber die Ableitung sieht falsch aus.

Mach das mal eher so



//Pars.h
#include <QtGui>
#include "maptest2.h"

class Pars:
{
public:
Pars(const Mappe& mappe);
Mappe mt;
};



//Pars.cpp
#include <QtGui>
#include "pars.h"

Pars::Pars(const Mappe& mappe) : mt(mappe)
{
qDebug(">>> Second: %d", mt.count() );
}


Also per Parameterübergabe an den Kontruktor

Ciao,
_