2013-02-18 1 views
0

QGraphicsScene 인스턴스를 GUI에서 스크롤바가 활성화되고 전체보기 포트 업데이트로 설정했습니다. 내 그래픽을 스크롤 할 때 나는 그들이 올바르게 코드에 추가하지만, 현장은 어떤 시점에 사라 QGraphics와 Graphics에 추가 된 항목을 얻고 (사용자 정의 클래스는 QGraphicsItem에서 상속) 스크롤에 표시 될 것으로 예상된다보기 :스크롤 QGraphicsView 및 QGraphicsScene

class CSquare : public QObject, public QGraphicsItem 

https://www.box.com/s/h4h94×1avgay1crzvyzx

:

void CSquare::paint(QPainter *painter, const QStyleOptionGraphicsItem *option, QWidget *widget) 
{ 
    static int sz; 
    painter->setFont(fnt_); 
    painter->fillRect(this->r,this->br); 
    painter->drawRect(this->r); 
    //painter->drawText(this->p,this->txt); 
    if (txt == "") 
     return; 
    if (fnt_.pixelSize()>0) 
     sz = fnt_.pixelSize(); 
    else 
     if (fnt_.pointSize()>0) 
      sz = fnt_.pointSize(); 
     else 
      if (fnt_.pointSizeF()>0) 
       sz = fnt_.pointSizeF(); 

    switch (this->al_flag) 
    { 
    case 1: 
     painter->drawText(this->p.x(),this->p.y(),sz*txt.size(),2*sz,Qt::AlignRight,this->txt); 
     break; 
    case 2: 
     //painter->drawText(this->r,Qt::AlignLeft,this->txt); 
     painter->drawText(this->p.x(),this->p.y(),sz*txt.size(),2*sz,Qt::AlignLeft,this->txt); 
     break; 
    case 3: 
     //painter->drawText(this->r,Qt::AlignCenter,this->txt); 
     painter->drawText(this->p.x(),this->p.y(),sz*txt.size(),2*sz,Qt::AlignCenter,this->txt); 
     break; 
    case 4: 
     //painter->drawText(this->r,Qt::AlignJustify,this->txt); 
     painter->drawText(this->p.x(),this->p.y(),sz*txt.size(),2*sz,Qt::AlignJustify,this->txt); 
     break; 
    } 
} 

하나가이 비디오 스크린 캐스트에서 응용 프로그램 실행에 사라 방법을 볼 수 있습니다 다음과 같이 페인트 방법이 구현된다

누군가가 문제를 암시 할 수 있습니다. 그래야 그래픽 항목이보기에서 사라지지 않을 것입니다. 사전에

감사합니다.

+0

해당 box.com 링크가 손상되었습니다. – Chris

답변

1

예, 죄송합니다. 문제가 이미 해결되었습니다. 문제가 상속 된 클래스의 사용자 지정 함수에 있습니다.

QRectF boundingRect() const;

유효한 직사각형을 반환해야합니다. 이제는 프로젝트에서 비디오를 삭제하겠다고 고쳤습니다.

감사합니다.

관련 문제