Seite 1 von 1

[SOLV]Speicherzugriffsfehler bei zugriff durch fremden slot?

Verfasst: 9. Januar 2008 23:19
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

Verfasst: 10. Januar 2008 06:31
von Christian81
Ohne Code gibts nur die Glakugel - und die mag gerade nicht.

Verfasst: 10. Januar 2008 20:54
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"

Verfasst: 10. Januar 2008 21:01
von Christian81
QObject::connect(MyWidget::lineEdit, SIGNAL(returnPressed()), qApp, SLOT(enable()));

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

Verfasst: 10. Januar 2008 21:03
von t0bias
habs gerade korrigiert, sorry, ich habe seit gestern noch
dran herum-gebastelt, jetzt ists aber wieder die "ur-problem-version"..
danke

Verfasst: 10. Januar 2008 21:05
von Christian81
Und jetzt schau mal wo Du nextButton definierierst.

Verfasst: 10. Januar 2008 21:05
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

Verfasst: 10. Januar 2008 21:10
von Christian81
Meinen Post gelesen und Dir deinen Code mal angeschaut??

Verfasst: 10. Januar 2008 21:11
von t0bias
die sind beide innerhalb von MyWidget?
versteh ich nicht? sorry, bin noch ein
rechter anfänger mit qt... :(

Verfasst: 10. Januar 2008 21:20
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)

Verfasst: 10. Januar 2008 21:29
von t0bias
bitte hilf mir nochmal: wieso habe ich lineEdit doppelt definiert?

Verfasst: 10. Januar 2008 21:41
von t0bias
ach soo!
mensch jetzt hab ichs verstanden!
danke dir!!!