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 개 타일을 포함해야한다는 것을 알고있다. 내가 도대체 뭘 잘못하고있는 겁니까?
감사합니다. Andreas. 그것은 나만인가, 아니면 아무 곳에도 설명되어 있지 않은가? 귀하의 링크에서 "모든 보이는 항목"을 언급하고 있지만 보이는 항목의 정의에는 투명한 항목이있는 것으로 보입니다. – Mitch
아직 확인하지 못했습니다. QGraphicsScene의 최적화입니다. 투명하게 표시되는 항목은 정의에 의해 보이지 않습니다 ... –
설명서 (5.0)가 곧 업데이트 될 예정입니다. – Mitch