qgraphicsview viel zu langsam

Alles rund um die Programmierung mit Qt
Antworten
samsamsam
Beiträge: 43
Registriert: 9. Juni 2009 16:22
Wohnort: Dortmund

qgraphicsview viel zu langsam

Beitrag von samsamsam »

hallo allerseits.

ich bin dabei etwa 1 000 000 QRects (ca 10 mal 10 pixel breit/hoch) in eine QGraphicsScene unterzubringen. Die Rects sollen im Prinzip Punkte in einem Koordinatensystem darstellen. in der praxis werden zwischen 800 000 und 1500 000 punkte dargestellt werden müssen und das läuft soweit sehr sehr langsam....javascript:emoticon(':(')

Wenn das Widget, in dem die QGraphicsView untergebracht ist, seine Größe ändert, dauert es ewig lange, bis die GraphicsView seinen Inhalt zeichnet.

Code: Alles auswählen

myScene =  new QGraphicsScene(this);
myScene->setItemIndexMethod(QGraphicsScene::BspTreeIndex);

//größe der szene 3000 x 3000
myScene->setSceneRect(0,0,3000,3000);

myScene->setBackgroundBrush(QBrush(Qt::transparent));

//x & y axis
plotCartesianAxis(QSize(3000,3000));

	
// eine million QRects zur Stene hinzufügen
	for(long int i = 0;i<1000000;i++)
	{
		
		x1 = rand()*y1;
		y1 = rand()*x1;
		if(x1<1500)
			x1 = 1500 + ((rand()*y1)%1000);
		else x1 = x1 % 2500;

		if(y1<1500)
			y1 = 1500 + ((rand()*x1)%1000);
		else y1 = y1 % 2500;

	
		QRectF newPoint(x1,y1,10,10);
		
                  myScene->addRect(newPoint, QPen(Qt::blue), QBrush(Qt::blue)); 
	
		       
				
}		
	

	
       myView = new QGraphicsView(myScene);
	QHBoxLayout *l = new QHBoxLayout(this);
	l->addWidget(myView);
	l->setMargin(0);
	setLayout(l);

//die view so skalieren, dass die ganze scene sichtbar wird
QTransform t;
	myView->setTransform(t.scale(factorWidth, factorHeight));
	myView->show();


Ich füge also zu testzwecken 1000000 Punkte in die scene ein und lasse die scene über qgraphicsview anzeigen.

wenn das widget, das die view beinhalter seine größe ändert, braucht die graphicsview ewig, um die view neu darzustellen.

mach ich was falsch oder hab ich einen wichtigen schritt vergessen?


ich habe schon mal versucht, die qrects, die sich schneiden in QPolygonF zusammenzufassen, so dass letztenendes weniger items in der scene sind, das ist aber trotzdem noch viel zu langsam. :(
Strahlex
Beiträge: 158
Registriert: 23. Dezember 2008 15:49
Wohnort: Österreich

Beitrag von Strahlex »

Hast du schon versucht das GraphicsView mit OpenGL zu rendern?
samsamsam
Beiträge: 43
Registriert: 9. Juni 2009 16:22
Wohnort: Dortmund

Beitrag von samsamsam »

meinst du mit

Code: Alles auswählen

myView->setViewport(new QGLWidget());
???
samsamsam
Beiträge: 43
Registriert: 9. Juni 2009 16:22
Wohnort: Dortmund

Beitrag von samsamsam »

ich habe

Code: Alles auswählen

myView = new QGraphicsView(myScene);
	QGLWidget *w = new QGLWidget(this);
	myView->setViewport (w);
hinzugefügt aber da kommen lauter fehlermeldungen....

Code: Alles auswählen

1>c:\qt\4.5.1_vs2008\include\qtopengl\../../src/opengl/qglcolormap.h(52) : error C2146: Syntaxfehler: Fehlendes ';' vor Bezeichner 'QtOpenGLModule'
1>c:\qt\4.5.1_vs2008\include\qtopengl\../../src/opengl/qglcolormap.h(52) : error C4430: Fehlender Typspezifizierer - int wird angenommen. Hinweis: "default-int" wird von C++ nicht unterstützt.
1>c:\qt\4.5.1_vs2008\include\qtopengl\../../src/opengl/qglcolormap.h(52) : error C4430: Fehlender Typspezifizierer - int wird angenommen. Hinweis: "default-int" wird von C++ nicht unterstützt.
1>c:\qt\4.5.1_vs2008\include\qtopengl\../../src/opengl/qgl.h(83) : error C2378: 'QtOpenGLModule': Neudefinition; Symbol kann nicht mit typedef überladen werden
1>        c:\qt\4.5.1_vs2008\include\qtopengl\../../src/opengl/qglcolormap.h(52): Siehe Deklaration von 'QtOpenGLModule'
1>.\sf_fldgraph.cpp(231) : error C2059: Syntaxfehler: '}'
Dabei hab ich nur #include <QGLWidget> hinzugefügt
samsamsam
Beiträge: 43
Registriert: 9. Juni 2009 16:22
Wohnort: Dortmund

Beitrag von samsamsam »

leider habe ich nur die gui-lizenz, kann also qglwidget nicht benutzen.
Strahlex
Beiträge: 158
Registriert: 23. Dezember 2008 15:49
Wohnort: Österreich

Beitrag von Strahlex »

Das GLWidget ist doch auch in der opensource Version dabei. Hast du eine komerzielle Lizenz?
samsamsam
Beiträge: 43
Registriert: 9. Juni 2009 16:22
Wohnort: Dortmund

Beitrag von samsamsam »

ja ich habe eine kommerzielle lizenz. keine volle sondern nur qt-gui
Christian81
Beiträge: 7319
Registriert: 26. August 2004 14:11
Wohnort: Bremen
Kontaktdaten:

Beitrag von Christian81 »

Wenn du eh eine kommerzielle Lizenz hast - frag doch einfach mal bei Trolltech nach ob sie Erfahrung mit so vielen Objekten haben.
Des weiteren ist Qt4.5 unter der LGPL verfügbar - du kannst sie also auch so nutzen solange du nicht statisch linkst. Und Testen kannst du auf alle älle mal mit der Opensource-Version ob es was bringt...
MfG Christian

'Funktioniert nicht' ist keine Fehlerbeschreibung
samsamsam
Beiträge: 43
Registriert: 9. Juni 2009 16:22
Wohnort: Dortmund

Beitrag von samsamsam »

ok danke ich versuch es mal mit trolltech kontaktieren
Antworten