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");
}
Anfängerübung mit Absturz
Re: Anfängerübung mit Absturz
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");
[...]
}
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?
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?
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?
-
- Beiträge: 122
- Registriert: 11. Juni 2008 18:39