Seite 1 von 1

[gelöst] Fenster mit QLabel

Verfasst: 27. Juni 2005 17:54
von KarlBlau
Hallo,

wie kann man folgendes realisieren:

die Mainfunktion soll ein Haupfenster öffnen. In diesem Fenster ist ein QLabel, dass ein zunächst leeres QPixmap enthält.
Durch Funktionen sollen per QPainter dieses QPixmap verändern.

Mein bisheriger Ansatz wird wohl am besten klar wenn ich die Landscape.h einfüge:

Code: Alles auswählen

class Landscape : public QWidget
{
private:
	double** data;

	QLabel *diagram;
	QPixmap pixmap(400,400);
	QPainter painter(&pixmap);
public:
	Landscape( QWidget *parent=0, const char *name=0 );
	void getData(std::string);     // Laden neuer Daten aus Datei
	void plotData(void);	          // Plot neu zeichnen
};
Mit diesem Ansatz komme ich scheinbar nicht so weit. Sowie ich die plotData Funktion implementieren will, muss ich auf 'pixmap' und 'painter' zugreifen. Dies ist aber nicht möglich (Fehler: Der linke Teil von ... muss Klasse/Union sein!).

Wie macht sowas, wenn man etwas mehr Erfahrung hat als ich?
Gruss, Karl

Re: Fenster mit QLabel

Verfasst: 27. Juni 2005 21:28
von Christian81
KarlBlau hat geschrieben:Hallo,
Mit diesem Ansatz komme ich scheinbar nicht so weit. Sowie ich die plotData Funktion implementieren will, muss ich auf 'pixmap' und 'painter' zugreifen. Dies ist aber nicht möglich (Fehler: Der linke Teil von ... muss Klasse/Union sein!).
Ich sehe zwar den Code nicht, aber vermute stark das Du einfach nur den falschen Operator benutzt...

Verfasst: 27. Juni 2005 22:14
von lepsai
Na ja, wenn ich es richtig verstanden habe, wird im plotData() etwas in pixmap gezeichnet. Dann brauchste nur paintEvent() zu überladen, darin p->drawPixmap(pixmap);

in plotData():

QPainter p(&pixmap);
p.draw...
p.end();
repaint(false);

painter braucht keine Klassenvariable zu sein...

Verfasst: 27. Juni 2005 22:39
von KarlBlau
Ich sehe schon, besser man postet gleich alles...

Code: Alles auswählen

void Landscape::plotData(void)
{
	for (int i=0; i<900; i++)
	{
		painter.setPen(Verlauf(performance[i], -1000, 1000));
		painter.drawPoint(100*x[i],100*y[i]);
	}
	painter.end();
	diagram->setPixmap(&pixmap);
}
Wäre das Überladen von paintEvent() eine bessere Möglichkeit?

Gruss, Karl

Verfasst: 27. Juni 2005 23:26
von lepsai
Ne, nicht bei deiner Struktur...

Es heißt aber: diagram->setPixmap(pixmap); // kein &pixmap

Wenn es immer noch nicht funktioniert, bitte detailierte Fehlerbeschreibung posten...

Verfasst: 27. Juni 2005 23:30
von lepsai
Alter Schwede, warum steht denn das in der Klassendklaration:
QPixmap pixmap(400,400);
QPainter painter(&pixmap);

??????????

erste Zeile gehört in den Konstuktor
und die zweite in die plotData().

Verfasst: 29. Juni 2005 22:44
von KarlBlau
Bin erst heute wieder an den Rechner gekommen. Danke für Eure Antworten. Nun funktioniert die Sache, wie ich mir das vorgestellt hatte.
Gruss, Karl