Herzlich Willkommen, lieber Gast!
  Sie befinden sich hier:

  Forum » KDevelop / Qt / wxWidget » QT QlinkedList

Forum | Hilfe | Team | Links | Impressum | > Suche < | Mitglieder | Registrieren | Einloggen
  Quicklinks: MSDN-Online || STL || clib Reference Grundlagen || Literatur || E-Books || Zubehör || > F.A.Q. < || Downloads   

Autor Thread - Seiten: > 1 <
000
27.08.2012, 13:55 Uhr
~Melanie_27
Gast


Ich bin gerade dabei eine QLinkedList<groups> zu erstellen, die wie der Name schon sagt aus Objekten der Klasse groups besteht.
Jedes Objekt vom Typ groups besitzt eine weitere QLinkedList<devices>, die aus Objekten der Klasse devices besteht. Eine verkettete Liste in einer verketteten Liste also.
Über main() erstelle ich 3 Elemente vom Typ groups und füge diese in die Liste QLinkedList<groups> ein. Alle drei Elemente erhalten 3 devices.
Mein Problem ist das Auslesen der einzelnen Gruppen. Ich möchte die devices einer jeden Gruppe auslesen.
Hier main():




C++:
#include <QtGui/QApplication>
#include <QtCore/QCoreApplication>
#include "mainwindow.h"
#include "groups.h"
#include <QLinkedList>
#include <iostream>
#include <QDebug>

using namespace std;
int main(int argc, char *argv[])
{
    QApplication a(argc, argv);
    MainWindow w;
    w.show();
    
    QLinkedList<groups> myList;
    QLinkedList<groups>::iterator iter;


    QString Group1("Group1");
    QString Group2("Group2");
    QString Group3("Group3");

    myList.append(Group1);
    myList.append(Group2);
    myList.append(Group3);

    QString Device1("Device1");
    QString Device2("Device2");
    QString Device3("Device3");

    iter=myList.begin();            //In erste Gruppe schreiben
    iter->adddevice(Device1);
    iter->adddevice(Device2);
    iter->adddevice(Device3);
    iter++;                         //In zweite Gruppe schreiben
    iter->adddevice(Device1);
    iter->adddevice(Device2);
    iter->adddevice(Device3);
    iter++;                         //In dritte Gruppe scheiben
    iter->adddevice(Device1);
    iter->adddevice(Device2);
    iter->adddevice(Device3);


    for(iter = myList.begin(); iter!= myList.end(); ++iter)
    {
        w.addParent(iter->getname()); //Alle Gruppennamen auslesen und als Parent eintragen.
        for (iter->getdeviceiter() = iter->getdevice().begin(); iter->getdeviceiter()!=iter->getdevice().end(); ++iter->getdeviceiter())  //Hier muss der Wurm drin sein.
        {
            w.addChild(iter->getdeviceiter()->getname2()); //Alle Devicenamen auslesen und als Child in richtige Gruppe eintragen.
        }
    }

    return a.exec();
}  



hier die groups.cpp


C++:
#include "groups.h"

groups::groups()
{}
groups::groups(const QString& pname)
{
    name=pname;
}
QString groups::getname()
{
   return name;
}
QLinkedList<devices>::iterator groups::getdeviceiter()
{
    return devIt;
}

void groups::adddevice(const QString& dname)
{
    device.append(dname);
}
QLinkedList<devices> groups::getdevice()
{
   return device;
}

groups::~groups()
{

}



Hier die groups.h


C++:
#ifndef GROUPS_H
#define GROUPS_H
#include <QString>
#include "devices.h"
#include <QLinkedList>
class groups
{
public:
    groups();
    groups(const QString& pname);
    QString getname();
    void adddevice(const QString& dname);
    QLinkedList<devices> getdevice();
    QLinkedList<devices>::iterator getdeviceiter();
    ~groups();

private:
    QString name;
    QLinkedList<devices> device;
    QLinkedList<devices>::iterator devIt;

};

#endif // GROUPS_H



hier die device.cpp


C++:
#include "devices.h"
devices::devices()
{}
devices::devices(const QString& name)
{
    dname = name;
}
QString devices::getname2()
{
   return dname;
}
devices::~devices()
{}



und folglich die device.h


C++:
#ifndef DEVICES_H
#define DEVICES_H
#include <QString>

class devices
{
public:
    devices();
    devices(const QString& name);
    ~devices();
    QString getname2();

private:
    QString dname;
};

#endif // DEVICES_H



Die einzelnen Gruppen und Devices möchte ich in ein QTreeWidget schreiben.
Die Gruppen sind hierbei die übergeordnete Struktur und mit jedem Klick auf die Gruppe sollen die einzelnen Devices sichtbar werden.

Mein Problem ist folgendes. Das Fenster mit dem TreeWidget öffnet sich, jedoch erscheint die Fehlermeldung "Der Prozess wurde nach Erhalt eines Signals vom Betriebssystem angehalten. Name des Signals: SIGSEGV Bedeutung: Segmentation fault.
Wie lese ich richtig die Liste device in der Klasse group aus und das alles von main aus?
Hoffe mir kann jemand helfen.
Viele liebe Grüße.
Melli
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
001
27.08.2012, 20:38 Uhr
TOSHMAX



Ich versteh zwar nicht wieso du den Iterator aus der Klasse heraus benutzen willst, aber dein Problem liegt in getdeviceiter. Du gibst devIt 'per value' zurück. D. h. der Rückgabewert ist nicht dieselbe Variable, wie die in der Klasse - eine Änderung wirkt also nur temporär. Die Rückgabe 'per reference' würde dein Problem beheben:

C++:
    QLinkedList<devices>::iterator& getdeviceiter();

Aber bei dem was ich sehe, würde es mehr Sinn machen, in main einen eigenen Device-Iterator zu verwenden, als einen von der Klasse groups verwalten zu lassen.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
Seiten: > 1 <     [ KDevelop / Qt / wxWidget ]  


ThWBoard 2.73 FloSoft-Edition
© by Paul Baecher & Felix Gonschorek (www.thwboard.de)

Anpassungen des Forums
© by Flo-Soft (www.flo-soft.de)

Sie sind Besucher: