[SOLV]Speicherzugriffsfehler bei zugriff durch fremden slot?

Alles rund um die Programmierung mit Qt
Antworten
t0bias
Beiträge: 46
Registriert: 12. November 2007 21:11

[SOLV]Speicherzugriffsfehler bei zugriff durch fremden slot?

Beitrag von t0bias »

Hallo,

ich möchte in einem Dialog sicherstellen, dass der User etwas
eingegeben hat. Dazu habe ist der "Next"-Button solange auf
nextButton->setEnabled(0);
gesetzt, bis der Benutzer einen Text eingegeben hat. Nur wenn ich vom EditLine-Slot aus
nextButton->setEnabled(1);
setze erhalte ich einen Speicherzugriffsfehler. GDB sagt "cannot access
memory at XXXXXX".
Versteh nur nicht wieso, kann mir jemand einen Tipp geben? Der Button
ist doch da, also müsste meiner Meinung nach auch der Pointer existieren,
da innerhalb desselben Widgets doch auch innerhalb des anderen Slots
oder liege ich da falsch?

Danke,

Tobi
Zuletzt geändert von t0bias am 10. Januar 2008 21:41, insgesamt 1-mal geändert.
Christian81
Beiträge: 7319
Registriert: 26. August 2004 14:11
Wohnort: Bremen
Kontaktdaten:

Beitrag von Christian81 »

Ohne Code gibts nur die Glakugel - und die mag gerade nicht.
MfG Christian

'Funktioniert nicht' ist keine Fehlerbeschreibung
t0bias
Beiträge: 46
Registriert: 12. November 2007 21:11

Beitrag von t0bias »

natürlich, entschuldige:

Code: Alles auswählen

#include <qapplication.h>
#include <qfont.h>
#include <qpushbutton.h>
#include <qwidget.h>
#include <qobject.h>
#include <qlineedit.h>

using namespace std;

class MyWidget : public QWidget
{

Q_OBJECT

public:
        MyWidget(void);
public slots:
        void enable(void);
protected:
        QLineEdit *lineEdit;
        QPushButton *nextButton;
};

MyWidget::MyWidget(void)
{

     setGeometry(25, 25, 250, 120);
     setCaption("Test");
     setName("MainWindow");

     QPushButton *nextButton = new QPushButton( "Next", this, "Button" );
     nextButton->setFont(QFont("Sans", 10, QFont::Normal));
     nextButton->setGeometry(120, 80, 90, 30);
     nextButton->setEnabled(0);

     QLineEdit *lineEdit = new QLineEdit( this, "lineEdit" );
     lineEdit->setGeometry(20,20,200,40);
     QObject::connect(lineEdit, SIGNAL(returnPressed()), this, SLOT(enable()));
}

void MyWidget::enable() {
        nextButton->setEnabled(1);
}


int main(int argc, char *argv[]) {
     QApplication app( argc, argv );
     MyWidget window;
     app.setMainWidget( &window );
     window.show();
     return app.exec();

}

#include "window.moc"
Christian81
Beiträge: 7319
Registriert: 26. August 2004 14:11
Wohnort: Bremen
Kontaktdaten:

Beitrag von Christian81 »

QObject::connect(MyWidget::lineEdit, SIGNAL(returnPressed()), qApp, SLOT(enable()));

ich dachte MyWidget ist der Empfänger, nicht qApp?
MfG Christian

'Funktioniert nicht' ist keine Fehlerbeschreibung
t0bias
Beiträge: 46
Registriert: 12. November 2007 21:11

Beitrag von t0bias »

habs gerade korrigiert, sorry, ich habe seit gestern noch
dran herum-gebastelt, jetzt ists aber wieder die "ur-problem-version"..
danke
Christian81
Beiträge: 7319
Registriert: 26. August 2004 14:11
Wohnort: Bremen
Kontaktdaten:

Beitrag von Christian81 »

Und jetzt schau mal wo Du nextButton definierierst.
MfG Christian

'Funktioniert nicht' ist keine Fehlerbeschreibung
t0bias
Beiträge: 46
Registriert: 12. November 2007 21:11

Beitrag von t0bias »

ich habe mit ddd einen break-point beim erreichen des slots gesetzt.
im moment, als der slot aufgerufen wird, hat nextButton auf der zeile innerhalb des slot-anweisungsblocks noch eine korrekte adresse, sobald
das programm die entsprechende stelle aber erreicht fällt die adresse auf
0xd0
das verstehe ich nicht?

danke für jede hilfe!

gruss

tobi
Christian81
Beiträge: 7319
Registriert: 26. August 2004 14:11
Wohnort: Bremen
Kontaktdaten:

Beitrag von Christian81 »

Meinen Post gelesen und Dir deinen Code mal angeschaut??
MfG Christian

'Funktioniert nicht' ist keine Fehlerbeschreibung
t0bias
Beiträge: 46
Registriert: 12. November 2007 21:11

Beitrag von t0bias »

die sind beide innerhalb von MyWidget?
versteh ich nicht? sorry, bin noch ein
rechter anfänger mit qt... :(
Christian81
Beiträge: 7319
Registriert: 26. August 2004 14:11
Wohnort: Bremen
Kontaktdaten:

Beitrag von Christian81 »

Das hat aber rein gar nichts mit Qt zu tun... wenn man lineEdit zweimal definiert passiert es eben dass man nicht das richtige lineEdit erwischt (bzw. das andere gar nicht mehr vorhanden ist)
MfG Christian

'Funktioniert nicht' ist keine Fehlerbeschreibung
t0bias
Beiträge: 46
Registriert: 12. November 2007 21:11

Beitrag von t0bias »

bitte hilf mir nochmal: wieso habe ich lineEdit doppelt definiert?
t0bias
Beiträge: 46
Registriert: 12. November 2007 21:11

Beitrag von t0bias »

ach soo!
mensch jetzt hab ichs verstanden!
danke dir!!!
Antworten