[gelöst] Fenster mit QLabel

Alles rund um die Programmierung mit Qt
Antworten
KarlBlau
Beiträge: 41
Registriert: 25. März 2005 14:31
Wohnort: Karlsruhe
Kontaktdaten:

[gelöst] Fenster mit QLabel

Beitrag 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
Christian81
Beiträge: 7319
Registriert: 26. August 2004 14:11
Wohnort: Bremen
Kontaktdaten:

Re: Fenster mit QLabel

Beitrag 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...
MfG Christian

'Funktioniert nicht' ist keine Fehlerbeschreibung
lepsai
Beiträge: 573
Registriert: 14. September 2004 21:33
Wohnort: Berlin
Kontaktdaten:

Beitrag 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...
KarlBlau
Beiträge: 41
Registriert: 25. März 2005 14:31
Wohnort: Karlsruhe
Kontaktdaten:

Beitrag 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
lepsai
Beiträge: 573
Registriert: 14. September 2004 21:33
Wohnort: Berlin
Kontaktdaten:

Beitrag 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...
lepsai
Beiträge: 573
Registriert: 14. September 2004 21:33
Wohnort: Berlin
Kontaktdaten:

Beitrag 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().
KarlBlau
Beiträge: 41
Registriert: 25. März 2005 14:31
Wohnort: Karlsruhe
Kontaktdaten:

Beitrag 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
Antworten