2012-09-06 2 views
2

특정 영역 내의 모든 항목을 선택하고 불투명도를 변경하고 싶습니다. 이 작업을 수행하려면 QGraphicsScene::items()을 사용하고 있지만 항목을 반환 할 수는 없습니다. 예 :QGraphicsScene :: items는 지정된 rect에 대해 항목을 반환하지 않습니다.

#include "MainWindow.h" 
#include "ui_MainWindow.h" 

#include <QDebug> 
#include <QKeyEvent> 
#include <QGraphicsPixmapItem> 

MainWindow::MainWindow(QWidget *parent) : 
    QMainWindow(parent), 
    ui(new Ui::MainWindow) 
    , scene(new QGraphicsScene()) 
{ 
    ui->setupUi(this); 

    ui->graphicsView->setScene(scene); 
    ui->graphicsView->installEventFilter(this); 
    ui->graphicsView->show(); 

    for (int y = 0; y < 20; ++y) { 
     for (int x = 0; x < 20; ++x) { 
      QPixmap pixmap("desert.png"); 
      QGraphicsPixmapItem* newItem(scene->addPixmap(pixmap)); 
      newItem->setPos(x * 25, y * 25); 
      newItem->setOpacity(0.0); 
      qDebug() << newItem; 
     } 
    } 
} 

MainWindow::~MainWindow() 
{ 
    delete ui; 
    delete scene; 
} 

bool MainWindow::eventFilter(QObject *obj, QEvent *event) 
{ 
    if(event->type() == QEvent::KeyPress) { 
     QKeyEvent *keyEvent = static_cast<QKeyEvent*>(event); 
     if (keyEvent->key() == Qt::Key_Space) { 
      QRectF rect(0, 0, 25 * 3, 25 * 3); 
      QList<QGraphicsItem*> items(scene->items(rect, Qt::ContainsItemBoundingRect, Qt::AscendingOrder)); 
      qDebug() << items; 
      foreach (QGraphicsItem *item, items) { 
       item->setOpacity(1.0); 
      } 
     } 
     return true; 
    } 
    return QObject::eventFilter(obj, event); 
} 

나는 내가 deviceTransform 인수를 제공 할 필요가 없다는 확신, 그리고 내가 전달하고있어 RECT 9 개 타일을 포함해야한다는 것을 알고있다. 내가 도대체 ​​뭘 잘못하고있는 겁니까?

답변

2
항목을 만들 때, 당신은 이미 그들이 보이지 않는 그래서 0으로 투명도를 설정

- 항목() 표시되는 항목은, http://qt-project.org/doc/qt-4.8/qgraphicsscene.html#items-10를 참조 반환 ... 모든 볼 수 항목을

반환

생성자에서 불투명도를 0보다 큰 값으로 설정하십시오. 예 :

newItem->setOpacity(0.001); 

이제 스페이스 바를 누르면 지정된 사각형의 네 항목이 나타납니다.

+1

감사합니다. Andreas. 그것은 나만인가, 아니면 아무 곳에도 설명되어 있지 않은가? 귀하의 링크에서 "모든 보이는 항목"을 언급하고 있지만 보이는 항목의 정의에는 투명한 항목이있는 것으로 보입니다. – Mitch

+0

아직 확인하지 못했습니다. QGraphicsScene의 최적화입니다. 투명하게 표시되는 항목은 정의에 의해 보이지 않습니다 ... –

+0

설명서 (5.0)가 곧 업데이트 될 예정입니다. – Mitch