Seite 1 von 1

Anfängerübung mit Absturz

Verfasst: 17. August 2009 18:41
von Caeruleus
Ich begreife nicht, warum bei untigem Programm die Zeile
mytextedit->setText("Hey") wie erwartet funktioniert, wenn ich die gleiche Zeile aber über die Methode go() aufrufe, das Programm abstürzt.

Vielen Dank!


main.cpp:

#include <KApplication>
#include <KAboutData>
#include <KCmdLineArgs>
#include <QDebug>
#include "mainwindow.h"
#include <iostream>

int main (int argc, char **argv)
{

KAboutData aboutData( "x1", 0,
ki18n("x1"), "1.0",
ki18n("Peter Schmidt"),
KAboutData::License_GPL,
ki18n("Copyright (c) 2007 Developer") );
KCmdLineArgs::init( argc, argv, &aboutData);

KApplication app;

MainWindow* window = new MainWindow();
window->show();

return app.exec();
}


mainwindow.h:

#ifndef MAINWINDOW_H
#define MAINWINDOW_H

#include <KXmlGuiWindow>
#include <KTextEdit>


class MainWindow : public KXmlGuiWindow
{
Q_OBJECT

public:
MainWindow(QWidget *parent=0);

private:
QTextEdit* mytextedit;

private slots:
void go();
};
#endif


mainwindow.cpp:

#include "mainwindow.h"
#include <QVBoxLayout>
#include <QPushButton>
#include <QTextEdit>

MainWindow::MainWindow(QWidget *parent) : KXmlGuiWindow(parent)

{
QWidget *mainWidget = new QWidget(this);
QVBoxLayout * mylayout = new QVBoxLayout(mainWidget);

QTextEdit *mytextedit = new QTextEdit(this);

mylayout->addWidget(mytextedit);

mytextedit->setText("Hey");
//go();

QPushButton * mybutton = new QPushButton("Go!",this);
mylayout->addWidget(mybutton);

setCentralWidget(mainWidget);
setupGUI();
}

void MainWindow::go() {
mytextedit->setText("Hey");
}

Re: Anfängerübung mit Absturz

Verfasst: 17. August 2009 19:46
von franzf

Code: Alles auswählen

class MainWindow : public KXmlGuiWindow
     {
      Q_OBJECT
      
      public:
      MainWindow(QWidget *parent=0);

      private:
      QTextEdit* mytextedit;  // das ist dein member
            
       private slots:
       void go();
      };

[...]

MainWindow::MainWindow(QWidget *parent) : KXmlGuiWindow(parent)

{
 [...]
    QTextEdit *mytextedit = new QTextEdit(this); // sooooo, was passiert hier?

    mytextedit->setText("Hey");
 [...]
}
Was denkst du was du im Konstruktor machst?
Schau dir das GENAU und so oft an bis du es verstehst :)
TIP: Ist das das gleiche Objekt, wie das das du als Member deklariert hast?

Verfasst: 18. August 2009 15:31
von Caeruleus
OK, vielen Dank, wenn ich das QTextEdit * weglasse geht es, aber was daran falsch ist, verstehe ich nicht.

QTextEdit* mytextedit; in der Deklaration heißt doch soviel wie: Die Variable mytextedit wird einen Zeiger auf ein QTextEdit Objekt enthalten.

und

QTextEdit * mytextedit = new QTextEdit(this);

im Code heißt: reserviere Speicher für eine QTextEdit Objekt und initialisiere es und schreibe den Zeiger darauf in die Variable mytextedit

oder?

Verfasst: 18. August 2009 15:53
von Curtis Newton
Beschäftige Dich mal mit der Gültigkeit von Variablen. Du hast ZWEI Variablen namens mytextedit! Einmal das in der Klasse und einmal eins lokal. Das zu suchen ist die Hausaufgabe ;-)


C.