[ERLEDIGT] Ich finde den fehler nicht.

Alles rund um die Programmierung mit Qt
Antworten
MacGyver
Beiträge: 24
Registriert: 7. November 2007 16:27

[ERLEDIGT] Ich finde den fehler nicht.

Beitrag von MacGyver »

Hallo

bei mir stürzt folgeder Code ab.
Ich versuche per SpinBox die Anzahl meiner vorhanden LineEdits
ebzurufen und den Text auszulesen.
Funktioniert aber nicht und ich weis nicht warum ?

Code: Alles auswählen

    int i = spinbox->value();
    for (int a = 0; a < i; ++a) {
        text[a] = new QString;
        *text[a] = lineEdits[a]->text();
    }
Vieleicht habt ihr ne Idee.

Gruß MacGyver
Zuletzt geändert von MacGyver am 4. Oktober 2010 07:49, insgesamt 1-mal geändert.
kater
Beiträge: 306
Registriert: 29. Dezember 2009 01:13
Wohnort: Darmstadt

Beitrag von kater »

Zu wenig Code. LineEdits? text?
MacGyver
Beiträge: 24
Registriert: 7. November 2007 16:27

Beitrag von MacGyver »

Hallo

also ich erstelle per

Code: Alles auswählen

for (int a = 0; a < i; ++a) {
        formGroupBoxb->addWidget(labels[a] = new QLabel(tr("Fehlerklasse %1:").arg(a + 1)),a,0);
        formGroupBoxb->addWidget(lineEdits[a] = new QLineEdit,a,1);
}
verschiedene QLineEdit's, i ist hier der rückgabewert von "QSpinBox->value();".
Dann versuche ich den Text von lineEdits[a] abzurufen.

Code: Alles auswählen

for (int a = 0; a < i; ++a) {
        inputs[a] = new QString;
        *inputs[a] = lineEdits[a]->text();
Wobei i auch wieder der Spinbox wert ist.

Gruß MacGyver
franzf
Beiträge: 3114
Registriert: 31. Mai 2006 11:15

Beitrag von franzf »

Wie sind "label" und "lineEdit" deklariert? Und wie gehst du sicher, dass der Wert in der Spinbox nicht größer ist als die Arrays?
Ich versuche per SpinBox die Anzahl meiner vorhanden LineEdits
lässt mich schaudern.
padreigh
Beiträge: 340
Registriert: 13. Mai 2010 10:06

Beitrag von padreigh »

Abgesehen davon das du
1. kein Kompilierbares Minimalbeispiel lieferst ( und damit implizit )
2. kritische Informationen zurückhältst (immer JEDE!! variable mit Typ liefern, woran sollen wir den Erraten - den Methoden?)
3. sehr seltsame Sachen machst ... wofür Speicherst du das Zeug alles

wird dein Problem wohl woanders liegen ... das hier ist genauso Sinnfrei aber tut:

Code: Alles auswählen

#include <QtGui/QApplication>
#include <QtGui>
#include <QtCore>
#include <QDebug>
#include <algorithm>

int main(int argc, char *argv[])
{
    srand(20);

    QApplication a(argc, argv);
    // Widget w;w.show();

    QGroupBox               * gb =  new QGroupBox;
    QFormLayout             * lay = new QFormLayout(gb);
    QVector<QLabel*>          labs;
    QVector<QLineEdit*>       lins;
    QVector<QString*>         txts;

    int i = 10;

    for (int a = 0; a < i; ++a)
    {
        labs.push_back(new QLabel(QString("Fehlerklasse %1:").arg(a + 1)));
        lins.push_back(new QLineEdit);
        lay->addRow(labs.back(),lins.back());
    }

    QString text("12345abcdef");

    // simulate apesNtypewriters
    for (int a = 0; a < i; ++a)
    {
        std::random_shuffle(text.begin(),text.end());
        lins.at(a)->setText(text);
    }


    for (int a = 0; a < i; ++a) {
        txts.push_back(new QString());
        *(txts.back()) = lins.at(a)->text();
    }

    for (int a = 0; a < i; ++a) {
        qDebug() << *txts.at(a);
    }

    gb->show();

    return a.exec();
}
Patrick (QtCreator 1.3.1, Qt 4.6.3)
---
template = subdirs
upsala
Beiträge: 3946
Registriert: 5. Februar 2006 20:52
Wohnort: Landshut
Kontaktdaten:

Beitrag von upsala »

Code: Alles auswählen

  int i = spinbox->value(); 
     for (int a = 0; a < i; ++a) { 
         text[a] = new QString; 
         *text[a] = lineEdits[a]->text(); 
     }
Warum so umständlich? Warum das 'new QString'? Wie ist text[] deklariert? Warum wird da keine QStringList verwendet?

Code: Alles auswählen

formGroupBoxb->addWidget(lineEdits[a] = new QLineEdit,a,1); 
Da spricht zwar ansich nichts dagegen, aber du solltest doch besser

Code: Alles auswählen

linesEdits[a]=new QLineEdit;
formGroupBoxb->addWidget(lineEdits[a],a,1); 
schreiben.

Außerdem scheinst du gerne C-Arrays zu verwenden, beschäftige die mal mit den Container-Klassen von Qt.
padreigh
Beiträge: 340
Registriert: 13. Mai 2010 10:06

Beitrag von padreigh »

Und vielleicht schaust du dir auch noch http://doc.qt.nokia.com/4.6/qobject.html#findChildren an .. damit geht sowas:

Code: Alles auswählen

#include <QtGui/QApplication>
#include <QtGui>
#include <QtCore>
#include <QDebug>

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


        QWidget wid;
        QVBoxLayout * lay = new QVBoxLayout(&wid);
        for (int i=0;i<5;++i)
        {
            lay->addWidget(new QLineEdit(&wid));
            wid.children().back()->setObjectName(QString("input_%1").arg(i));
        }
        for (int i=0;i<5;++i)
        {
            lay->addWidget(new QLineEdit(&wid));
            wid.children().back()->setObjectName(QString("out_%1").arg(i));
        }

        QList<QLineEdit*> in= wid.findChildren<QLineEdit*>(QRegExp("input"));
        QList<QLineEdit*> out= wid.findChildren<QLineEdit*>(QRegExp("out"));

        qDebug() << "INPUTs";
        foreach (QLineEdit * edit, in)
            qDebug() << edit->objectName();

        qDebug() << "OUTPUTs";
        foreach (QLineEdit * edit, out)
            qDebug() << edit->objectName();

    wid.show();


    return a.exec();
}
Patrick (QtCreator 1.3.1, Qt 4.6.3)
---
template = subdirs
MacGyver
Beiträge: 24
Registriert: 7. November 2007 16:27

Beitrag von MacGyver »

Besten Dank für die Tips.
Habe den Fehler gefunden, hat sich somit erledigt!
Antworten