CAD Anwendung - Fadenkreuz und Rasterpunkte

Verschiedenes zu Qt
Antworten
griffin27
Beiträge: 12
Registriert: 13. Februar 2009 15:20

CAD Anwendung - Fadenkreuz und Rasterpunkte

Beitrag von griffin27 »

Hallo liebe Qt-Gemeinde,

ich bin noch relativ blutiger Anfänger in Sachen Qt und C++.

Bin grad dabei, dass ich meine ersten Schritte in Richtung CAD-Software wage.

Ich arbeite mit Qt 2009.3 (4.5.2).
Leider bin ich mit der Performance überhaupt nicht zufrieden.

Mein Programm malt derzeit ein Hintergrund Punkte-Raster, darüber ein Fadenkreuz.
Selbst ohne Grafikelemente an sich ist das Fadenkreuz schon sehr lahm über den Raster-Punkten. Sind die Rasterpunkte weg, ist auch das Fadenkreuz relativ schnell.

Ein paar Hintergründe:
Stuktur: QMainWindow - QGraphicsView - QScene
Fadenkreuz und Raster sind als QGraphicsItem implementiert

In QGraphicsView wird der Slot mouseMoveEvent zum Updaten der Fadenkreuzposition verwendet.

Was kann ich machen, damit das Fadenkreuz möglichst agil ist?
Auf das Raster möchte ich nicht verzichen müssen.

Das Raster ist derzeit A4-Format in mm groß (Scene-Koordinaten) mit einem Abstand von 2mm. D.h. ca. 15000 Punkte.


Soll ich das Grid vielleich in ein Bild zeichnen, und immer nur das Bild anzeigen? Da kenn ich mich jedoch noch nicht so aus.
Wie kann man das ganze schneller machen?

Ein "Problem" hab ich auch noch: Nach dem Starten der EXE-Datei muss ich mit dem Cursor ca. 10s lang hin- und herfahren, bis das Fadenkreuz angemessen schnell reagiert. In dieser Zwischenzeit hat es eine Updaterate von ca. einmal pro Sekunde.
Hab ich da vielleicht einen Fehler im Programm?

Wenn ihr Code-Ausschnitte braucht, bitte einfach sagen.

Schöne Feiertage wünsch ich ncoh.
lg, Karl
Dateianhänge
Screenshot
Screenshot
20091222.png (23.23 KiB) 2360 mal betrachtet
upsala
Beiträge: 3946
Registriert: 5. Februar 2006 20:52
Wohnort: Landshut
Kontaktdaten:

Beitrag von upsala »

Auf dem Screenshot sind keine 15000-Punkte zu sehen. Zeichnest du event. immer alle 15000-Punkte, obwohl sie nicht sichtbar sind? Außerdem würde ich die Darstellung der Punkte abschalten, wenn die Skalierung zu klein wird.

Mal davon abgesehen, würde ich die Punkte mit drawBackground zeichnen, da das Grid ja auch außerhalb deines A4-Blattes wirkt.
griffin27
Beiträge: 12
Registriert: 13. Februar 2009 15:20

Beitrag von griffin27 »

Hallo,

danke für deine Hinweise.

Gezeichnet werden tatsächlich immer alle Punkte. Aber ich glaube, dass Qt das doch managed, dass nur die betroffenen Punkte gezeichnet werden, oder?

Ich hab jetzt noch viel herumprobiert. Auch drawBackground, aber das war noch langsamer.

Schlussendlich hat mir der Befehl:

Code: Alles auswählen

	setCacheMode(QGraphicsItem::DeviceCoordinateCache, QSize(rect.width(),rect.height()));
geholfen. Nun werden die Rasterpunkte wirklich schnell gezeichnet, und das Fadenkreuz folgt dem Cuser angenehm schnell.

Das mit dem ausblenden des Grids bei kleinem Zoom-Faktor ist eine gute Idee.
Hab ich gleich umgesetzt:
in der paint-methode:

Code: Alles auswählen

...
	if (scene()->views()[0]->matrix().m11() * spacing() < MIN_GRID_SPACING)
		return;
...
lg, Karl
upsala
Beiträge: 3946
Registriert: 5. Februar 2006 20:52
Wohnort: Landshut
Kontaktdaten:

Beitrag von upsala »

Da du deine Punkte wahrscheinlich mit 2-For-Schleifen erstellst, kannst du dort am meisten optimieren, wenn du deine Punkte nur für den sichtbaren Bereich an Qt übergibst.
Antworten