Suche auf lima-city
-
in: QT übergabe eines Objektarrays an einen slot?
geschrieben von omegano
also das mit deiner initialisierung war aufjedenfall schonmal ein fehler. der andere fehler war
das if() musste anders gestaltet werden.
void MForm::search(){ QString str = lineEdit->text(); QString buf,temp; str=str.toLower(); textEdit->clear(); for(int i=0 ; i<LENGTH-1 ; i++){ if(myd[i]!=NULL){ if((myd[i]->owner.toLower()).indexOf(str)!= -1){ buf.clear(); buf=buf.setNum(myd[i]->gala)+":"; buf+=QString::number(myd[i]->system)+":"; buf+=QString::number(myd[i]->plani)+" / "; buf+="von "+myd[i]->owner+"(Punkte: "+ QString::number(myd[i]->points) +" / AZ: "+QString::number(myd[i]->az)+")"; buf+=" Planetenname: "+myd[i]->name; buf+=" / Allianz: "+myd[i]->alli+"\n"; temp=textEdit->toPlainText(); temp.append(buf); textEdit->setPlainText(temp); } } } }
Da es sonst sein kann das er nen toLower auf nen Attribut macht, wo der Zeiger ins Nirvana zeigt.
Vielen dank für deine Hilfe ;) -
in: QT übergabe eines Objektarrays an einen slot?
geschrieben von omegano
xxx/CCWkoloDBbeta/mainForm.cpp:9: error: '=': 'Data **' kann nicht in 'Data *[]' konvertiert werden
aber warum ist das array nicht initialsiert ich mache das doch mit getDatabase ? :o -
in: QT übergabe eines Objektarrays an einen slot?
geschrieben von omegano
also ich hab die erste änderung der deklaration funktioniert so nicht, die abfrage ob myd!=NULL abfrage hab ich mit eingebaut bewirkt aber nix, segfault immer noch da.
ich hab ja Data* myd[] als attribut der class MForm, ich intialisiere dieses array im konstruktor was soweit auch sinn macht da die daten, im zur ganzen laufzeit erhalten bleiben sollen, mir kommts einfach so vor als ob der search slot myd[] garnicht kennt. obwohl er dies ja müsste ist ja ein attribut seiner class. daher macht mich das son bisschen ratlos ich wüsst halt nicht wie ich ihm das sonst sinnvoll übergeben könnte. -
in: QT übergabe eines Objektarrays an einen slot?
geschrieben von omegano
Sinn des Programms, ich möchte das mein Programm ein Objekt-Array durchsucht und die Ergebnisse in nen Textfeld postet soweit kein Problem. Aber...
Ich hab das Problem das ich in unten genannten Code einen Segmentation Fault kriege. Ich denke mal es liegt daran das ich dem slot search() nicht das array mit übergeben habe. Ich hab auch mein Qt Buch schonmal durchgewälzt und keine Ahnung wie ich das machen soll. Ich werde wohl irgendwie einen SIGNAL schreiben müssen das den selben Parameter wie SLOT hat das habe ich schon herausgefunden. Aber wie könnte sowas hier Sinnvoll aussehen? Und was ich mich auch frage durch die Methode getDatabase(Data* myd[]) initialisiere ich ja das array myd[] mit den objekten, das funktioniert soweit auch alles ganz gut. Aber wieso muss ich überhaupt dem search slot das Objekt Array übergeben. Es ist doch ein Attribut dieser Klasse somit müsste das doch wenn es im Konstruktor initialsiert wurde, verfügbar und mit den Daten gefüllt sein.
Header Datei
#ifndef MAINFORM_H #define MAINFORM_H #include <QtGui> #include <QString> #include <QFile> #include "data.h" #include "ui_mainwindow.h" #define LENGTH 100000 class MForm : public QMainWindow, private Ui::MainWindow { Q_OBJECT public: Data* myd[]; MForm(); ~MForm(){} protected slots: void search(); void save(); private: void getDatabase(Data* myd[]); }; #endif // MAINFORM_H
Quellcode-Datei:
Ich hab den Code um die Sachen gekürzt die Funktionieren
#include "mainForm.h" #include "db.h" MForm::MForm(){ //Gui Initialisieren setupUi(this); //Daten Data* myd[LENGTH]; for(int n=0; n<LENGTH; n++){ myd[n] = NULL; } getDatabase(myd); //connects connect( pushButton , SIGNAL(clicked()), this , SLOT(search()) ); connect( lineEdit, SIGNAL(returnPressed()), this , SLOT(search()) ); connect( pushButton_2 , SIGNAL(clicked()), this , SLOT(save()) ); } void MForm::search(){ QString str = lineEdit->text(); QString buf,temp; str=str.toLower(); textEdit->clear(); for(int i=0 ; i<LENGTH ; i++){ if( (myd[i]->owner.toLower()).indexOf(str)!= -1 ){ buf.clear(); buf+=buf.setNum(myd[i]->gala)+":"; buf+=buf.setNum(myd[i]->system)+":"; buf+=buf.setNum(myd[i]->plani)+" / "; buf+="von "+myd[i]->owner+"("+ myd[i]->points +" / "+myd[i]->az+")"; buf+=" Planetenname: "+myd[i]->name; buf+=" Allianz: "+myd[i]->alli+"\n"; temp=textEdit->toPlainText(); temp.append(buf); textEdit->setPlainText(temp); } } } }