Seite 1 von 1

[ERLEDIGT] Ich finde den fehler nicht.

Verfasst: 1. Oktober 2010 23:38
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

Verfasst: 2. Oktober 2010 03:00
von kater
Zu wenig Code. LineEdits? text?

Verfasst: 2. Oktober 2010 06:18
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

Verfasst: 2. Oktober 2010 08:36
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.

Verfasst: 2. Oktober 2010 08:45
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();
}

Verfasst: 2. Oktober 2010 08:47
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.

Verfasst: 2. Oktober 2010 09:46
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();
}

Verfasst: 4. Oktober 2010 07:49
von MacGyver
Besten Dank für die Tips.
Habe den Fehler gefunden, hat sich somit erledigt!