ich habe eine Tabelle und jedes Mal, wenn in der ersten Spalte etwas herein geschrieben wird, wird ein Qgraphicsitem erstellt. Dieses Item wird dann auf eine Szene geprintet. Die Tabelle und die Szene sind in einem Stackedwidget. Man kann mit Buttons zwischen ihnen hin und her switchen. Beim klicken auf den Button, der mir die Szene anzeigt, wird nach dem switchen zum richtigen Widget, folgende Funktion aufgerufen:
Code: Alles auswählen
void MainWindow::aktualisierenVis()
{
for(int j = 0 ; j<this->table->datenVec.size() ; j++){ // so oft wie es daten im Vektor gibt
if(j<anzahlDatenPunkte){ //falls der Datenpunkt schon erstellt wurde, wird seine Position nicht verändert. Nur der Inhalt wird dann aktualisiert
this->table->datenVec[j]->update();
}else{
if(j==0){
this->table->datenVec[j]->setPos(j,this->analyse->scene->height()/4);
}else{
this->table->datenVec[j]->setPos(this->table->datenVec[j-1]->pos().x()+this->table->datenVec[j-1]->getWidth()+20,this->analyse->scene->height()/4);
}
this->analyse->scene->addItem(this->table->datenVec[j]);
qDebug()<<this->table->datenVec[j]->getWidth();//<-------immer 0
this->anzahlDatenPunkte++;
}
if(this->table->datenVec[j]->domäne_Person == ""){
this->table->datenVec[j]->hide();
}
else{
this->table->datenVec[j]->show();
}
}
}Code: Alles auswählen
#include "../header/datenpunkt.h"
#include <QDebug>
DatenPunkt::DatenPunkt(QGraphicsItem *parent)
{
textItem = new QGraphicsTextItem(this);
setFlag(QGraphicsItem::ItemIsMovable);
}
int DatenPunkt::getWidth()
{
return this->boundingRect().width();
}
void DatenPunkt::paint(QPainter *painter, const QStyleOptionGraphicsItem *option, QWidget *widget)
{
painter->setBrush(Qt::red);
painter->drawRect(0,0,this->textItem->boundingRect().width(),this->textItem->boundingRect().height());
if(this->domäne_Person != ""){
textItem->setPlainText(domäne_Person);
}
}
QRectF DatenPunkt::boundingRect() const
{
return QRectF(0,0,this->textItem->boundingRect().width(),this->textItem->boundingRect().height());
}
Wenn ich etwas in die Tabelle schreibe und danach direkt zu Szene switche, dann zurück zur Tabelle und in die zweite Zweile etwas schreibe, dann wieder zurück zu Szene gehe werden die beiden Qgraphicsitem richtig positioniert. Also die Abfrage "this->table->datenVec[j-1]->getWidth()" funktioniert. Solbald man allerdings mehrere Zeilen hintereinander ausfüllt, werden die Items nur um den Wert 20 verschoben, da "this->table->datenVec[j-1]->getWidth()" 0 ist. Kann mir da Jemand helfen?
Falls ihr noch Infos braucht sagt bescheid!
Liebe Grüße