[SOLV]Speicherzugriffsfehler bei zugriff durch fremden slot?
[SOLV]Speicherzugriffsfehler bei zugriff durch fremden slot?
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
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:
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:
-
Christian81
- Beiträge: 7319
- Registriert: 26. August 2004 14:11
- Wohnort: Bremen
- Kontaktdaten:
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
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:
-
Christian81
- Beiträge: 7319
- Registriert: 26. August 2004 14:11
- Wohnort: Bremen
- Kontaktdaten: