Qgraphicsitem größe Abfrage immer 0

Alles rund um die Programmierung mit Qt
Antworten
ReasyEasyPeasy
Beiträge: 18
Registriert: 10. Juli 2015 15:47

Qgraphicsitem größe Abfrage immer 0

Beitrag von ReasyEasyPeasy »

Moin,
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();
        }

    }

}
Der datenVec ist gefüllt mit den erstellten QGraphicsItems:

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());
}
In der Klasse MainWindow werden jeweils eine Instanz von table erstellt und von Szene.
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
Antworten