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
Code: Alles auswählen
#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
Ich hab den Code um die Sachen gekürzt die Funktionieren
Code: Alles auswählen
#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);
}
}
}
}