PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : [Qt] Probleme mit QCanvas



Flying_Eagle
20-02-2004, 23:42
Moin.

ich soll mich fuer ein Schulreferat in Qt einarbeiten. Die Aufgabenstellung ist aber ziemlich umfangreich.

Es soll ein Feld geben, in das man Punkte zeichnen kann und die danach durch Linien zu einem Graphen verbunden werden.

Ich hab die GUI jetzt relativ weit mit dem Designer gemacht, aber finde nirgends ein QCanvas zum Draufklicken und auf den Dialog platzieren. Und das Ganze manuell irgendwie zu integrieren krieg ich auch nicht hin.

Zu meinem Wissensstand: Ich hab das erste Tutorial zur Haelfte durchgearbeitet und dann noch das QuickTut zum Designer, also ich bin noch nicht sooo weit, aber naja, ich muss es halt irgendwie hinkriegen und hab keine Zeit fuer ein ewiges Trial&Error.

Danke schonmal im Vorraus.

//edit: Haette auch nix gegen nen ICQ-Query :D

tuxipuxi
21-02-2004, 00:29
hi,

im designer ist im default keine möglichkeit, ein QCanvasView zu erzeugen. in einem alten Qt buch habe ich ein beispiel gefunden, was deinem problem sehr ähnelt.

ich habe es dir mal als tarball hochgeladen:
http://www.tuxipuxi.de/canvas.tar.bz2

einfach
qmake && make ausführen und mit ./canvas2 starten.

gruss,
michael.

p.s: ist natürlich nicht genau das gleiche, aber sehr ähnlich.

Flying_Eagle
21-02-2004, 00:50
Vielen Dank. Das kann ich glaub ich gut gebrauchen. Versuchen das in mein Projekt einzubinden werde ich aber erst morgen, wenn ich ausgeschlafen bin.

Nur noch ne kurze Frage: Ist das QCanvasView notwendig, damit man ueberhaupt was von dem Canvas sehen kann? Ich hab es bis jetzt immer nur mit nem Canvas und ner CanvasLine probiert...

tuxipuxi
21-02-2004, 08:48
Original geschrieben von Flying_Eagle
Vielen Dank. Das kann ich glaub ich gut gebrauchen. Versuchen das in mein Projekt einzubinden werde ich aber erst morgen, wenn ich ausgeschlafen bin.

Nur noch ne kurze Frage: Ist das QCanvasView notwendig, damit man ueberhaupt was von dem Canvas sehen kann? Ich hab es bis jetzt immer nur mit nem Canvas und ner CanvasLine probiert...

hi,

ja, weil ein QCanvas keine von QWidget abgeleitete klasse ist. der QCanvasView hat den Canvas als child und stellt ihn dar.

gruss,
michael.

axeljaeger
21-02-2004, 13:13
Auf was für eine Schule gehst du denn und in was für einer Jahrgangsstufe darf man so was machen?

Flying_Eagle
22-02-2004, 18:49
Gymnasium und 12. Klasse.
Da wir bis jetzt grafische Oberflaechen nur mit Delphi erstellt haben, koennt ihr euch ungefaehr vorstellen, wie ueberfordert ich bin...

Ich hab jetzt mal versucht das Beispielprogramm in eine HBox zu integrieren, um dem Ganzen eine Form gebe zu koennen, aber dann wird dir Flaeche nicht angezeigt.

Ich den Kram mal an, waere nett, wenn mir da jemand raushelfen koennte, da ich das Referat morgen halte, allerdings muss ich das im Notfall nicht haben.


//edit: Ich hab das vorerst entscheidende markiert...

tuxipuxi
22-02-2004, 19:19
hi,
funktionierende version:
http://www.tuxipuxi.de/main.cpp
(erklärung folgt gleich, dachte ich lade das schnell hoch, weil du es bald haben musst).

ok, da wo ich was geändert hab, habe ich das durch einen kommentar signalisiert.

line-by-line:



QCanvas canvas(this, "flaeche");
canvas.resize(100, 100);
Zeichenflaeche z(canvas);
z.show();


du erstellst die objekte auf dem stack und dadurch sind sie nur solange existent, bis der konstruktor durchlaufen ist und du siehst den canvasview danach nicht mehr. deswegen habe ich das in folgendes geändert:



QCanvas *canvas = new QCanvas(this, "flaeche"); //auf heap, weil sonst weg nach konstruktor
canvas->resize(100, 100); //-> weil pointer
Zeichenflaeche *z = new Zeichenflaeche(canvas, this); //auf heap, weil sonst weg nach konstruktor


beide objekte auf dem heap, -> statt . weil ich auf einem pointer operiere.
das show() kannst du weglassen, wenn du widgets innerhalb von widget subclasses instanziierst, weil das Qt automatisch anzeigt.

die restlichen änderungen habe ich nur vorgenommen, weil dein code nicht auf den pointer "eingestellt" war, sind also keine wirklichen codeänderungen.

tu mir bitte den gefallen und sag deinem lehrer von mir, dass man code und seine kommentare auf englisch schreibt, klassennamen wie "Zeichenflaeche" haben da nichts zu suchen.

gruss,
michael.

anda_skoa
22-02-2004, 19:24
Wenn du Canvas und View im Box Widget erzeugst, musst du die Instanzen am Heap erzeugen, weil sie sonst am Ende des Konstruktors ihre Gültigkeit verlieren



Komposition::Komposition(QWidget *parent, const char *name)
: QVBox(parent, name)
{
QFont ueberschrift("Times", 16);

QLabel *hello = new QLabel("Hallo", this, "hello");
hello->setFont(ueberschrift);
hello->show();


//=========================================
QCanvas* canvas = new QCanvas(this, "flaeche");
canvas->resize(100, 100);
Zeichenflaeche* z = new Zeichenflaeche(canvas, this);
z->show();
//==========================================

QPushButton *quit = new QPushButton("Tschuess", this, "quit");
connect(quit, SIGNAL(clicked()), qApp, SLOT(quit()));



Den Konstruktor von Zeichenfklaeche natürlich noch so anpassen, dass er als erstes Argument QCanvas* hat statt QCanvas&

Ciao,
_

Flying_Eagle
22-02-2004, 19:44
Vielen, vielen Dank!!!
Jetzt muss ich nur noch den Code vereinfachen, damit ihn auch die anderen verstehen. Auf den Rest, wie z.B. die gewueschte Datenbankanbindung verzichte einfach mal.


Wie lange habt ihr denn so gebraucht bis ihr die Programmierbasics drauf hattet? Also z.B., dass man manche Sachen eben mit Argumenten wie (canvas, this) aufrufen muss? Ich hab hier das Wort heap das erste Mal gehoert.

tuxipuxi
22-02-2004, 20:15
wie lange man braucht um sowas zu wissen hängt natürlich von den vorkenntnissen und der intensität des lernens ab. ich beschäftige mich mit Qt seit einiger zeit zum spass, anda_skoa ist seit längerer zeit softwareentwickler und arbeitet auch in der firma mit Qt.

das mit this fällt einem sofort auf, wenn man weiss, wie das parent modell in Qt gedacht ist. ein nicht-top-level-widget hat ein parent widget, in dem es angezeigt wird. das fällt natürlich schnell auf, wenn man weiss, wo das problem ist. (edit: das parent modell hat nicht nur was mit widgets zu tun, auch nicht-graphical-control klassen wie QProcess haben ein parent.)

gruss,
michael.

Flying_Eagle
23-02-2004, 11:04
Gut. Ich hab mein Referat jetzt gehalten. Habe aber weiterhin den Auftrag dieses Programm zu schreiben.
Da muss ich Pixel auf dem Canvas anklicken koennen. Wo soll ich da ansetzen. Weder beim QCanvas noch beim QCanvasView habe ich ne Funktion gefunden, die mir was ueber nen Mausklick in dem Feld berichtet :(

tuxipuxi
23-02-2004, 15:53
hi,

QCanvasView erbt von QWidget und hat daher einen mousePressEvent event handler, den man reimplementieren kann, wenn man QCanvasView wiederum subclassed. was sollst du denn genau machen?

gruss,
michael.

p.s: freu dich, dass du das machen darfst.. ich werde mit delphi gelangweilt von einem lehrer, der nichtmal das kann.

Flying_Eagle
23-02-2004, 17:07
Original geschrieben von tuxipuxi
hi,

QCanvasView erbt von QWidget und hat daher einen mousePressEvent event handler, den man reimplementieren kann, wenn man QCanvasView wiederum subclassed. was sollst du denn genau machen?

Wir behandeln momentan Graphen, also diese Dinger, wo jeder Knoten mit jedem verbunden ist und jetzt soll ein Programm geschrieben werden, das schoen anschaulich das Travelling-Salesman-Problem loest.
Dazu soll ich das GUI machen.
D.h. es gibt ein Canvasfeld auf dem man durch Mausklick Punkte auswaehlen kann. Hat man das getan, kann man sie verbinden und die Koordinaten in einer Datenbank abspeichern.

Den Loesungsalgorithmus entwickeln wir dann mit Hilfe des Lehrers.




p.s: freu dich, dass du das machen darfst.. ich werde mit delphi gelangweilt von einem lehrer, der nichtmal das kann.
Ich find auch cool, dass wir solche Sachen machen. Delphi hat mich immer gestresst, da es sehr empfindlich auf schlecht konfigurierte Schulsysteme reagiert und abzustuerzen pflegt bzw. komische Sachen tut.

Mein Problem bei der Sache ist, dass ich gar nicht weiss, wo ich mit dem Lernen anfangen soll. Bis jetzt haben wir in C++ nur die wichtigsten Basics von Kopien abgeschrieben (naja, ich hab zuhause wenigstens noch ein bisschen rumexperimentiert), aber ausserhalb der Schule hab ich sonst quasi gar nicht Programmiert, mehr so Anwendungskram gemacht.

Aber wenn ich das Projekt zuende gebracht habe, kann ich denke ich auch andere Sachen machen und vielleicht auch produktive Programme schreiben.


//edit: Ich Esel! Das mit dem MousePressEvent kann man ja auch in dem Beispiel sehen...

tuxipuxi
23-02-2004, 17:31
Hi,

ein weiteres, ähnliches QCanvas Beispiel findest du im Qt Examples Ordner in demo. Ein QCanvas Beispiel gibt es auch noch in canvas.
Arbeitet ihr eigentlich unter Linux oder mit Windows?


Gruss,
Michael.

Flying_Eagle
23-02-2004, 22:20
Leider nur mit Windows fuer das es ja nur ne Evaluation-Lizenz gibt, wobei wir vielleicht auch ne Educational bekommen.
Hier zuhause nem ich Linux...

Flying_Eagle
24-02-2004, 22:17
Moin nochmal.

Ich bin gerade dabei mir das QCanvas-Feld selbst aufzubauen, da es ja etwas anders sein muss als das Beispiel.
Nun komm ich an der Stelle nicht weiter, wo auf das Feld geklickt wird und ein Punkt gezeichnet werden soll. QCanvasEllipse braucht ja als Uebergabeparameter das QCanvas auf das es gezeichnet werden soll. Da komm ich jetzt aber nicht dran, weil sich das ja in einem protected mousePressEvent abspielt. Am Anfang hab ich noch versucht den ganzen Node in der mousePressEvent-Funktion zu erstellen, dann hab ich ne Node-Klasse erstellt, was mir aber null gebracht hat, wie ich dann festgestellt habe (haette ich _vorher_ nachdenken sollen). Jetzt hab ich mir weiter den Kopf zerbrochen, bin aber nicht auf die Loesung gekommen.
Aber seht besser selbst, die Stelle habe ich gekennzeichnet.

Die Header-Datei:


#ifndef CANVAS2_H
#define CANVAS2_H

#include <qapplication.h>
#include <qcanvas.h>
#include <stdlib.h>
#include <time.h>
#include <qlabel.h>
#include <qpushbutton.h>
#include <qfont.h>
#include <qvbox.h>

//////////////////////////////////////////////////////////////////////////////////////

//============Node================
class Node : QCanvasEllipse
{
public:
Node(QCanvas *canvas);

};

//============GraphView===========
class GraphView : public QCanvasView
{
public:
GraphView(QCanvas *c, QWidget *parent=0, const char *name=0, WFlags f=0);

protected:
void mousePressEvent(QMouseEvent *event);
void mouseReleaseEvent(QMouseEvent *event);
void mouseMoveEvent(QMouseEvent *event);
};

//////////////////////////////////////////////////////////////////////////////////////

#endif // CANVAS2_H


Die CPP-Datei:


#include <qapplication.h>
#include <qcanvas.h>
#include <stdlib.h>
#include <time.h>

#include "canvas2.h"

//////////////////////////////////////////////////////////////////////////////////////

//============Node-Konstruktor===========
Node::Node(QCanvas *canvas)
: QCanvasEllipse(5, 5, canvas)
{
QCanvasEllipse *node = new QCanvasEllipse();
setBrush(QBrush(QColor(0, 0, 0)));
}

//============GraphView-Konstruktor========
GraphView::GraphView(QCanvas *c, QWidget *parent, const char *name, WFlags f)
: QCanvasView(c, parent, name, f)
{
resize(sizeHint());
}

//===========GraphView-mousePressEvent=======
void GraphView::mousePressEvent(QMouseEvent *event)
{

// !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! !!!!!!!!!!!!!!!!!!!!
// Hier kommt Node nicht an das Canvas und seine Methoden ran
// !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! !!!!!!!!!!!!!!!!!!!!
Node *n = new Node(c);
// !!!!!!!!!!!
n->move(event->x(), event->y());
n->show();
n->setZ(5);
// !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! !!!!!!!!!!!!!!!!!!!!
}
//////////////////////////////////////////////////////////////////////////////////////



P.S.: Erzaehlt mir bitte nicht, wo ich welche includes weglassen kann. Das mach ich zum Schluss und brings mir dann durch Trial&Error bei: So praegt sich mir das besser ein.

tuxipuxi
25-02-2004, 10:55
Hi,



Nun komm ich an der Stelle nicht weiter, wo auf das Feld geklickt wird und ein Punkt gezeichnet werden soll. QCanvasEllipse braucht ja als Uebergabeparameter das QCanvas auf das es gezeichnet werden soll. Da komm ich jetzt aber nicht dran, weil sich das ja in einem protected mousePressEvent abspielt.


QCanvasView hat eine Methode canvas(), die dir einen Pointer auf das Canvasobjekt zurückliefert. Diesen Pointer kannst du als Canvasparent übergeben. (Siehe QCanvasView class reference.)

Gruss,
Michael.

Flying_Eagle
26-02-2004, 21:56
Mittlerweile habe ich es sogar geschafft, selber Nodes fuer den spaeteren Graphen zu zeichnen.
Nu will ich deren Koordinaten in eine QTable schreiben, auf die kann ich aber vom Node-Konstruktor nicht zugreifen.
Achja, die QTable namens werteTable habe ich mit dem Designer angefertigt.
Hier die wichtigen Codeteile:

aus graphform.ui.h:



void werteTable::addCoordinates(int xWert, int yWert)
{
setNumRows(numRows()+1);
setText(numRows(), 0, xWert);
setText(numRows(), 1, yWert);
update();
}


aus canvas.cpp:



Node::Node(QCanvas *canvas, int x, int y)
: QCanvasEllipse(6, 6, canvas)
{
// Erstellung des Nodes
setBrush(QBrush(QColor(109, 109, 250)));
move((x-3), (y-3));
show();
setZ(100);

//Speichern der Node-Koordinaten
werteTable.addCoordinates(x, y);
}


#include "graphform.h" ist in beiden canvas-Dateien (.cpp und .h) drin und die Fehlerausgabe ist:



canvas2.cpp: In member function `virtual void GraphView::mousePressEvent(QMouseEvent*)':
canvas2.cpp:45: error: `werteTable' undeclared (first use this function)
canvas2.cpp:45: error: (Each undeclared identifier is reported only once for each function it appears in.)



//edit: Ich habs jetzt mal mit S&S probiert, aber da gibt er mir den gleichen Fehler (nur in ne anderen line) aus.... *weiter_rumbastel*...
Dem Rechner scheinen ein paar Draehte durchgeglueht zu sein. Ich habe den String werteTable jetzt komplett aus meinem Code entfernt, aber es gibt immer noch die gleiche Fehlermeldung.

Flying_Eagle
01-03-2004, 21:26
So. Jetzt komm ich wirklich nicht mehr weiter. In den mainwindow-Dateien verursache ich entweder Speicherzugriffsfehler oder es funktioniert nicht.

Mein Ziel ist es, die Koordinaten der Nodes in die Tabelle zu schreiben...

Danke fuer eure Hilfe.

SumpfMonsterJun
03-03-2004, 00:28
Hi Flying_Eagle,

Dein Problem ist recht simpel, Du hast die Zeile, in der die QTable erstellt wird versehentlich
auskommentiert.

In mainwindow.cpp ungefähr in Zeile 18 muß folgendes stehen:

xyTable = new QTable(0, 2, this, "xytable");

anstatt

// QTable *yTable = new QTable(0, 2, this, "xytable");

Gruss, SMJ

SumpfMonsterJun
03-03-2004, 00:39
Hi Flying_Eagle,

im Anhang ist die funktionierende Fassung (mit Eintrag in die QTable) als Archiv.

Beste Grüsse, SMJ

Flying_Eagle
03-03-2004, 18:18
Hmpf. Dann war das wahrscheinlich die einzige Moeglichkeit, die ich noch nicht ausprobiert hatte ;_^
Danke, danke, danke.

//edit: Auf die Sache mit dem dynamic_cast waere ich natuerlich selber gekommen ;P
Gibt es in der Doku ueberhaupt eine Stelle, in der diese Funktion (oder was auch immer das ist) erwaehnt wird? Ich konnte nichts finden.


Ein anderer aus meinem Kurs macht ein aehnliches Programm in DirectX -> Overkill?
Das hat noch nicht mal halbwegs ne GUI...

tuxipuxi
03-03-2004, 18:29
hi,

dynamic_cast und co. sind c++ standard, nicht Qt spezifisch, also musst du dir dafür eine cpp reference suchen( vielleicht ist es ja auf cppreference.com ).

das mit directx kann ich nicht bewerten, hab mich nie damit beschäftigt.

gruss,
michael.

Flying_Eagle
03-03-2004, 21:03
jo, google hats mir gegeben ;)
Und das "The Free On-line Dictionary of Computing" hat mir gesagt, dass ein cast eine "explicit type conversion" ist. Ich versteh aber nicht ganz was da nun konvertiert/transformiert oder was-auch-immer werden soll. Fuer mich sieht die Funktion des dynamic_casts eher so aus, dass er mir auch Objekte liefert auf die ich sonst nicht so einfach zugreifen koennte bzw. verglichen wird ob ein bestimmtes Objekt zu einem bestimmten Typ gehoert!?

SumpfMonsterJun
04-03-2004, 11:50
Hi Flying Eagle,

Zuallererst eine Anmerkung zum Code, besser ist es, Du ersetzt in canvas.cpp

MainWindow * pmwParent = dynamic_cast< MainWindow* >( parent() );

mit

MainWindow * pmwParent = dynamic_cast< MainWindow* >( parentWidget() );

habe ich im Code vergessen, gleich so zu schreiben.

die zugrundeliegende Idee ist, die QWidget::parentWidget() Methode zu benutzen, mit der man einen Zeiger auf das Eltern-Widget erhält. Da GraphView von QWidget erbt, steht diese Funktion zur Verfügung. Das eigentliche Problem ist aber, daß das Elternobjekt von GraphView ein MainWindow-Objekt ist, welches zwar ebenfalls von QWidget erbt und damit eines ist, Du brauchst aber die Methode MainWindow::addCoordinates, an diese kommst Du über die von parentWidget() gelieferte QWidget-Schnittstelle nicht heran. Du könntest nun einen schmutzigen C-Cast machen wie folgt:

MainWindow * pmwParent = ( MainWindow* ) parentWidget();

das wäre aber sehr gefährlich, denn wenn das Elternobjekt nicht tatsächlich eine MainWindow Klasse ist, ist das Ergebnis undefiniert, was auf ein "Setzen, 6" hinausläuft (sprich Absturz des Programms). Auch wenn es in Deinem Fall funktionieren könnte, so wäre es doch möglich, daß GraphView mittels QWidget::reparent() an ein neues Elternobjekt zur Laufzeit zu übergeben wird und dann wäre der obige cast ungültig.

dynamic_cast schafft all dem Abhilfe, denn es prüft, ob der übergebene Parameter ( in Deinem Fall parentWidget ) überhaupt in den in eckigen Klammern spezifizierten Typ umwandelbar ist. Falls das nicht geht, liefert dynamic_cast 0 zurück. Somit sind sichere Casts möglich. Letztendlich sind Casts aber immer nur Kompromisse die sich mittels abstrakter Klassen vermeiden lassen. Immerhin sind sie mit den C++ Mitteln (dymic_cast, static_cast ) leichter aufzuspüren.

Viele Grüsse, SMJ

SumpfMonsterJun
04-03-2004, 11:56
Noch ein Nachtrag zum DirectX:

im Prinzip läßt sich mit einem aktuellen DirectX (ab Version7) vernünftig arbeiten, selbst die Win32-GUI-Elemente stehen zur Verfügung. Es hat aber mindestens drei eintscheidende Nachteile:

1.) Nicht portabel
2.) die Windows GUI über die Win32 Schnittstelle zu programmieren ist eine wahre Pein, mit der MFC ists nicht viel besser
3.) umständlich zu debuggen

QT löst alle diese Probleme auf die eleganteste Weise.

Gruß, SMJ

anda_skoa
04-03-2004, 12:36
Original geschrieben von Flying_Eagle
Und das "The Free On-line Dictionary of Computing" hat mir gesagt, dass ein cast eine "explicit type conversion" ist. Ich versteh aber nicht ganz was da nun konvertiert/transformiert oder was-auch-immer werden soll.

Jede Datenstruktur in C++ hat einen Ty, zb int oder eine Klasse.

Der Kompiler kennt die Eigenschaften der Typen, und kann daher prüfen, ob bestimmte Code Kontrukte möglich sind, als ob zum Beispiel ein Operator für einen Typ vorhanden ist.

Der Cast verwandelt den Typ der Datenstruktur aus Sicht des Comilers, die Struktur im Speicher bleibt dabei unverändert, die Daten dort werden aber abhängig vom Zieltyp anders interpretiert.

Bei einem Cast einer Klassen Instanz auf eine andere Klasse, kennt der Compiler nun die Funktionen der Zielklasse, d.h. er erlaubt diese aufzurufen.
Wenn das ein ungültiger Cast war, dann kann alles mögliche passieren, darum sollte man nur casten, wenn man sicher ist, dass der Cast erlaubt ist, bzw eine Cast-Art benutzen, die das selbst prüft (eben zB dynamic_cast)

Ciao,
_

Flying_Eagle
05-03-2004, 10:13
Danke nochmal fuer die Erklaerungen.
Ich hab das Programm gestern noch stark erweitert.
Falls es euch interessiert, koennt ihr euch die aktuelle Version unter www.mastas.de/graph_tool.tar.gz runterladen (die aktuelle lad ich hoch wenn ich gleich zuhause bin).

Aber ich hab noch ne Frage:
Warum laeuft das daemliche Programm nicht unter Window (W2k mit VC++)?
Es gestaltet sich sehr unoeglich meinem Lehrer das Programm zu zeigen, wenn es nicht vernuenftig kompiliert :(
Bei der Ausfuehrung kommt immer ein Runtime-Error, wenn ich in das Canvas klicke.
Wenn ich einen Node manuell hinzufuege (neues Feature) funktioniert es.

tuxipuxi
05-03-2004, 14:56
Original geschrieben von Flying_Eagle
Danke nochmal fuer die Erklaerungen.
Ich hab das Programm gestern noch stark erweitert.
Falls es euch interessiert, koennt ihr euch die aktuelle Version unter www.mastas.de/graph_tool.tar.gz runterladen (die aktuelle lad ich hoch wenn ich gleich zuhause bin).

Aber ich hab noch ne Frage:
Warum laeuft das daemliche Programm nicht unter Window (W2k mit VC++)?
Es gestaltet sich sehr unoeglich meinem Lehrer das Programm zu zeigen, wenn es nicht vernuenftig kompiliert :(
Bei der Ausfuehrung kommt immer ein Runtime-Error, wenn ich in das Canvas klicke.
Wenn ich einen Node manuell hinzufuege (neues Feature) funktioniert es.

hi,

ein bisschen debugger ausgabe wäre schon nett :).

gruss,
michael.

Flying_Eagle
05-03-2004, 15:01
Original geschrieben von tuxipuxi
ein bisschen debugger ausgabe wäre schon nett :).


Es kam nur "Runtime-Error" und dann noch das die Applikation irgendwie fruehzeitig terminiert wurde (ich glaub auch unexpected), aber windowstypisch nichts wirklich verwertbares.

Achja ich hab am Anfang der mousePressEvent-Methode eine Messagebox eingefuegt, aber diese wird nicht angezeigt. Vermutlich liegt der Fehler deswegen im Aufruf der Methode.

anda_skoa
05-03-2004, 15:40
Es könnte sein, dass du zB eine Variable benutzt, aber nicht initialisierst.
Der GCC initialsiert sie vielleicht auf 0 und der vc++ nicht.

Wenn du dein Program in VC++ im Debug Modus kompilierst, sollte sich beim Crash der Debugger starten und dir erlauben den Fehler zu lokalisieren.

Ciao,
_