Anzeige:
Ergebnis 1 bis 12 von 12

Thema: QMap in Tabelle auslesen

  1. #1
    Registrierter Benutzer
    Registriert seit
    07.11.2005
    Beiträge
    11

    QMap in Tabelle auslesen

    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
    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

  2. #2
    Administrator Avatar von anda_skoa
    Registriert seit
    17.11.2001
    Ort
    Graz, Österreich
    Beiträge
    5.477
    Erzeug mal den Iterator erst wenn du ihn brauchst.

    Ciao,
    _
    Qt/KDE Entwickler
    Debian Benutzer

  3. #3
    Registrierter Benutzer
    Registriert seit
    07.11.2005
    Beiträge
    11
    Alles klar
    vielen dank

  4. #4
    Registrierter Benutzer
    Registriert seit
    07.11.2005
    Beiträge
    11
    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();

    }

  5. #5
    Registrierter Benutzer
    Registriert seit
    18.03.2005
    Beiträge
    211
    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 ...
    Geändert von RHBaum (20-01-2006 um 10:40 Uhr)

  6. #6
    Administrator Avatar von anda_skoa
    Registriert seit
    17.11.2001
    Ort
    Graz, Österreich
    Beiträge
    5.477
    Zitat Zitat von ogre
    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,
    _
    Qt/KDE Entwickler
    Debian Benutzer

  7. #7
    Registrierter Benutzer
    Registriert seit
    07.11.2005
    Beiträge
    11
    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
    >>> Counter von Map 2: 0

  8. #8
    Administrator Avatar von anda_skoa
    Registriert seit
    17.11.2001
    Ort
    Graz, Österreich
    Beiträge
    5.477
    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
    Qt/KDE Entwickler
    Debian Benutzer

  9. #9
    Registrierter Benutzer
    Registriert seit
    07.11.2005
    Beiträge
    11
    Hallo,

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

    thx

  10. #10
    Administrator Avatar von anda_skoa
    Registriert seit
    17.11.2001
    Ort
    Graz, Österreich
    Beiträge
    5.477
    Zum Beispiel dem zweiten Kontruktor übergeben oder mit einer Methode darauf zugreifen.

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

    Ciao,
    _
    Qt/KDE Entwickler
    Debian Benutzer

  11. #11
    Registrierter Benutzer
    Registriert seit
    07.11.2005
    Beiträge
    11
    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

    Code:
    // MapTest2.h
    #include <QtGui>
    typedef QMap<int, int> Mappe;
    
    class MapTest2 : public QMainWindow
    {
    public:
        MapTest2(QWidget *parent = 0);
        Mappe map;
    };
    Code:
    // 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() );	
    }
    Code:
    //Pars.h
    #include <QtGui>
    #include "maptest2.h"
    
    class Pars: public MapTest2
    {
    public:
    	Pars();
    	MapTest2 mt;
    };
    Code:
    //Pars.cpp
    #include <QtGui>
    #include "pars.h"
    
    Pars::Pars()
    {	
    	qDebug(">>> Second: %d", mt.map.count() );	
    }

  12. #12
    Administrator Avatar von anda_skoa
    Registriert seit
    17.11.2001
    Ort
    Graz, Österreich
    Beiträge
    5.477
    Ich weiß ja nicht was du machen willst, aber die Ableitung sieht falsch aus.

    Mach das mal eher so

    Code:
    //Pars.h
    #include <QtGui>
    #include "maptest2.h"
    
    class Pars: 
    {
    public:
            Pars(const Mappe& mappe);
            Mappe mt;
    };
    Code:
    //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,
    _
    Qt/KDE Entwickler
    Debian Benutzer

Lesezeichen

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •