Alles rund um die Programmierung mit Qt
MacGyver
Beiträge: 24 Registriert: 7. November 2007 16:27
Beitrag
von MacGyver » 1. Oktober 2010 23:38
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 » 2. Oktober 2010 03:00
Zu wenig Code. LineEdits? text?
MacGyver
Beiträge: 24 Registriert: 7. November 2007 16:27
Beitrag
von MacGyver » 2. Oktober 2010 06:18
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 » 2. Oktober 2010 08:36
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 » 2. Oktober 2010 08:45
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();
}
upsala
Beiträge: 3946 Registriert: 5. Februar 2006 20:52
Wohnort: Landshut
Kontaktdaten:
Beitrag
von upsala » 2. Oktober 2010 08:47
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 » 2. Oktober 2010 09:46
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();
}
MacGyver
Beiträge: 24 Registriert: 7. November 2007 16:27
Beitrag
von MacGyver » 4. Oktober 2010 07:49
Besten Dank für die Tips.
Habe den Fehler gefunden, hat sich somit erledigt!