Liste-Problem
-
- Beiträge: 18
- Registriert: 20. September 2007 14:49
Liste-Problem
Hallo Forum,
ich möchte eine Liste erzeugen, die folgendermaßen aussieht:
"Blatt 1", 22
"Blatt 2", 32
"Blatt 3", 44
...
...
Der erste Wert soll ein String sein, der zweite Wert soll ein Integer sein. Im Borland C++ Builder konnte ich sowas mit einer StringList erschlagen, wobei jedes Element noch ein Object bekam, das den Integer enthielt. Unter Linux mit KDevelop scheint das nicht mehr zu gehen. Bisher habe ich mir:
List,
QStringList,
QValueList,
struct,
angesehen und den ganzen Nachmittag rumprobiert, aber ich komme nicht weiter. Könnt ihr mir mal einen Tip geben, wie ich weiter machen kann?
MfG
Eure Frau Kuchen
ich möchte eine Liste erzeugen, die folgendermaßen aussieht:
"Blatt 1", 22
"Blatt 2", 32
"Blatt 3", 44
...
...
Der erste Wert soll ein String sein, der zweite Wert soll ein Integer sein. Im Borland C++ Builder konnte ich sowas mit einer StringList erschlagen, wobei jedes Element noch ein Object bekam, das den Integer enthielt. Unter Linux mit KDevelop scheint das nicht mehr zu gehen. Bisher habe ich mir:
List,
QStringList,
QValueList,
struct,
angesehen und den ganzen Nachmittag rumprobiert, aber ich komme nicht weiter. Könnt ihr mir mal einen Tip geben, wie ich weiter machen kann?
MfG
Eure Frau Kuchen
Da würde ich eine Kombination aus struct und QList nehmen (oder QVector, etc.)
Ist jetzt nicht getestet der Code, sollte prinzipiell aber funktionieren.
Code: Alles auswählen
typedef struct {
QString Text;
int Nummer;
} meinStruct;
QList<meinStruct> meineListe;
-
- Beiträge: 18
- Registriert: 20. September 2007 14:49
Hallo iaby,iaby hat geschrieben:Da würde ich eine Kombination aus struct und QList nehmen (oder QVector, etc.)Ist jetzt nicht getestet der Code, sollte prinzipiell aber funktionieren.Code: Alles auswählen
typedef struct { QString Text; int Nummer; } meinStruct; QList<meinStruct> meineListe;
erstmal Danke für Deine Hilfe. Ich benutze KDevelop 3.4.0 und Qt 3.3.7 und dort kann ich QList nicht finden. Meinst Du eventuell QValueList?
Hier ist mein struct:
Code: Alles auswählen
typedef struct Zahnrad
{
QString qstrBezeichnung;
unsigned int uiZaehnezahl;
} meinZahnrad;
http://doc.trolltech.com/3.3/qvaluelist.html
nicht zurecht. Mittlerweile habe ich schon zig Variationen ausprobiert.
Codevervollständigung in KDevelop funktioniert auch nicht immer
-
- Beiträge: 18
- Registriert: 20. September 2007 14:49
Hallo upsala,upsala hat geschrieben:'Funktioniert nicht immer' ist keine Fehlermeldung. Und bei der QValueList-Doku ist ein passendes Beispiel dabei.
Mit "Funktioniert nicht immer" meine ich, mal funktioniert sie, mal nicht. Keine Ahnung warum. Unter Project->Project Options->C++ Support sind auf dem Reiter "Code Completion" in der Groupbox "Code Completion Options" jedenfalls alle Checkboxen angehakt. Muß ich noch mehr dazu beachten?
Das QValueList-Beispiel habe ich wohl gesehen und auch versucht, es auszuprobieren. Für das, was ich machen will, scheint mir das Beispiel mit der Klasse Employee viel zu umfangreich, wie mit Kanonen auf Spatzen schießen. Mittlerweile habe ich ein ähnliches Beispiel in der Dokumentation von "QPtrList Class Reference" gefunden und es auf meine Verhältnisse angepaßt. Ich poste mal ein Beipiel, wie ich es gemacht habe. Es ist nicht sehr elegant und ich bitte um eure Verbesserungsvorschläge.
Hier ist die (bereinigte) Header-Datei:
Code: Alles auswählen
#ifndef KENTFALTUNG_H
#define KENTFALTUNG_H
#include "kentfaltungdlg.h"
#include <fstream>
#include <qstring.h>
#include <qmessagebox.h>
#include <qlineedit.h>
#include <qtable.h>
#include <qdir.h>
#include <qfile.h>
#include <qfiledialog.h>
#include <qtextstream.h>
#include <qstringlist.h>
#include <qptrlist.h>
class KEntfaltung : public frmEntfaltung
{
Q_OBJECT
public:
KEntfaltung(QWidget* parent = 0, const char* name = 0, WFlags fl = 0 );
~KEntfaltung();
/*$PUBLIC_FUNCTIONS$*/
void LoescheTabelle(QTable *qtblTab);
void Auswerten(QTable *qtblTab, QString qstrTemp);
typedef struct Zahnrad
{
QString qstrBezeichnung;
unsigned int uiZaehnezahl;
} meinZahnrad;
typedef meinZahnrad * pZahnrad;
public slots:
/*$PUBLIC_SLOTS$*/
virtual void slotLoeschen();
virtual void slotSpeichern();
virtual void slotOeffnen();
virtual void slotTestdaten();
virtual void slotBerechnen();
protected:
/*$PROTECTED_FUNCTIONS$*/
protected slots:
/*$PROTECTED_SLOTS$*/
};
#endif
Code: Alles auswählen
void KEntfaltung::slotTestdaten()
{
QPtrList<Zahnrad> qplBlatt;
qplBlatt.setAutoDelete(true);
pZahnrad myZahnrad;
myZahnrad = new meinZahnrad;
myZahnrad->qstrBezeichnung = "Blatt 1";
myZahnrad->uiZaehnezahl = 22;
qplBlatt.append(myZahnrad);
myZahnrad = new meinZahnrad;
myZahnrad->qstrBezeichnung = "Blatt 2";
myZahnrad->uiZaehnezahl = 32;
qplBlatt.append(myZahnrad);
myZahnrad = new meinZahnrad;
myZahnrad->qstrBezeichnung = "Blatt 3";
myZahnrad->uiZaehnezahl = 44;
qplBlatt.append(myZahnrad);
tblZahnrad->setNumRows(qplBlatt.count());
for (unsigned int ui = 0; ui < qplBlatt.count(); ui++)
{
tblZahnrad->verticalHeader()->setLabel(ui, qplBlatt.at(ui)->qstrBezeichnung);
tblZahnrad->setText(ui, 0, QString::number(qplBlatt.at(ui)->uiZaehnezahl));
}
}
MfG Eure Frau Kuchen
Solltest du diesen Teil hier noch öfters benötigen:
Wäre es sinnvoll einen Konstruktor für deinen 'struct' zu erstellen, dann dann könnte man im kürzesten Falle auch so schreiben:
Code: Alles auswählen
myZahnrad = new meinZahnrad;
myZahnrad->qstrBezeichnung = "Blatt 1";
myZahnrad->uiZaehnezahl = 22;
qplBlatt.append(myZahnrad);
Code: Alles auswählen
qplBlatt.append(new meinZahnrad("Blatt 1", 22));
-
- Beiträge: 18
- Registriert: 20. September 2007 14:49
Hallo upsala,upsala hat geschrieben:Solltest du diesen Teil hier noch öfters benötigen:Wäre es sinnvoll einen Konstruktor für deinen 'struct' zu erstellen, dann dann könnte man im kürzesten Falle auch so schreiben:Code: Alles auswählen
myZahnrad = new meinZahnrad; myZahnrad->qstrBezeichnung = "Blatt 1"; myZahnrad->uiZaehnezahl = 22; qplBlatt.append(myZahnrad);
Code: Alles auswählen
qplBlatt.append(new meinZahnrad("Blatt 1", 22));
jepp, den obigen Code aus dem ersten Code-Schnipsel brauche ich dreimal und acht mal.
Genausso wie in deinem Beispiel aus dem zweiten Code-Schnipsel wollte ich das auch haben, bin aber wohl zu doof, um das hinzukriegen. So wird es ja auch in Beispielen der beiden Dokus zu:
http://doc.trolltech.com/3.3/qvaluelist.html
http://doc.trolltech.com/3.3/qptrlist.html
gezeigt. Also muß ich doch eine Class bauen, oder?
MfG, Frau Kuchen
-
- Beiträge: 18
- Registriert: 20. September 2007 14:49
Also ich versuchs mal:upsala hat geschrieben:Du kennst den Unterscheid zwischen 'class' und 'struct'. Versuch dir mal C++-Grundlagen anzueignen...
Eine Klasse entspricht einer Schablone, mit der Sie gleichartige Objekte beschreiben können. Dabei fasst die Klasse alle in diesem Kontext relevanten Eigenschaften und möglichen Zustände der Objekte zusammen. Ein Objekt ist immer eine Ausprägung einer Klasse. Man bezeichnet es dann auch als Instanz oder Exemplar der Klasse (zum Beispiel: Klasse Button, Objekte PlayButton und StopButton). Von jeder Klasse können mehrere Objekte gleichzeitig existieren. Jede Klasse kann Variablen, also gespeicherte Daten, beinhalten. Diese nennt man Attribute oder Datenelemente der Klasse. Sie können bei jedem Objekt andere Werte haben (Beispiel: Beschriftung, Höhe). Ändern Sie den Wert eines Attributs in einem Objekt, so gilt diese Änderung auch nur für dieses Objekt; alle anderen bleiben unverändert.
Mit Hilfe von Strukturen (struct) kann ich aus einfachen Variablentypen wie char, double, int oder string neue, benutzer definierte Typen schaffen.
Ja, die fehlenden Grundlagen versuche ich mir gerade anzueignen. Habe gemerkt, das mir einiges an Wissen fehlt, obwohl ich schon viele Jahre in C++ programmiere. Aber wenn man autodidaktisch lernt, dann gibt es eben Wissenlücken. Die versuche ich nun aufzufüllen. Deswegen lese ich unter anderm auch gerade
http://www.cpp-entwicklung.de/cpplinux3 ... _main.html
um weiter zu kommen.
Vielen Dank, das Du mir auf meinem Weg des Lernens weiter hilfst.