dartsellungsfehler bei graphicsitems

Alles rund um die Programmierung mit Qt
Antworten
slash-ex
Beiträge: 239
Registriert: 30. März 2005 21:40

dartsellungsfehler bei graphicsitems

Beitrag von slash-ex »

Ich habe Darstellungsfehler bei einem Zeichentest, den ich ausführe bevor ich eine komplexere Zeichenfunktion auf graphicsitems übertrage. aber ich weis leider nicht warum der fehler auftritt.
Standardmäßig wird immer Qt::NoBrush verwendet, nur falls ich einen anderen setze soll das rechteck gefüllt werden. leider kommt es zu artefakten wenn ich dann scrolle (siehe thumbs). der fehler tritt auch auf, wenn ich statt NoBrush einen anderen brush setze, es bilden sich immer weise zwischenräume beim scrollen.

Code: Alles auswählen

	NucItem(int iPosX, int iPosY, int iWidth, int iHeight, QString sNuc, int iIndex = 0,
			QBrush bBrush = QBrush(Qt::NoBrush) );

Code: Alles auswählen

    QGraphicsView view;
    QGraphicsScene *scene = new QGraphicsScene;

    for(int y = 0; y < 100; y++)
    	for(int x = 0; x < 100; x++) {
    		NucItem *item;
    		if(x%2 == 0)
    			item = new NucItem(x+x*16, y+y*16, 16, 16, "A", y*100+x);
    		else item = new NucItem(x+x*16, y+y*16, 16, 16, "B", y*100+x, QBrush(Qt::red) );
    		scene->addItem(item);
    	}

    view.setScene(scene);
    view.show();

Code: Alles auswählen

void NucItem::paint(QPainter *pPainter, const QStyleOptionGraphicsItem *pOption, QWidget *pWidget) {
    QRect rRect(m_iPosX, m_iPosY, m_iWidth, m_iHeight);
    QPen pPen(Qt::black, 1);

	pPainter->setBrush(m_bBrush);
	pPainter->setPen(pPen);

	m_ppPath.addRect(rRect);
//	m_ppPath.addText(m_iPosX+m_iWidth/2, m_iPosY+m_iHeight/2, QFont(), m_sNucleotide);

	pPainter->drawPath(m_ppPath);
	pPainter->drawText(rRect, Qt::AlignCenter, m_sNucleotide);
}
nicht gescrollt:
Bild
gescrollt:
Bild

edit:
tritt anscheinend nur bei painterpath' auf
franzf
Beiträge: 3114
Registriert: 31. Mai 2006 11:15

Beitrag von franzf »

Warum verwaltest du Position selber?
Dein Problem ist ziemlich sicher ein fehlerhaft implementiertes boundingRect().
Antworten