2
我想選擇某個區域內的所有項目並更改其不透明度。我使用QGraphicsScene::items()
來做到這一點,但我似乎無法讓它返回任何項目。舉個例子:QGraphicsScene :: items不會返回給定矩形的任何項目
#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瓦。我究竟做錯了什麼?
謝謝安德烈亞斯。這僅僅是我還是這個沒有解釋的地方?從鏈接中我可以看到它提到了「所有可見項目」,但可見的定義似乎包含透明項目。 – Mitch
我還沒有進一步檢查 - 也許這是QGraphicsScene中的一個優化,它假設完全透明的項目根據定義是不可見的... –
文檔(5.0)將會很快更新並進行澄清。 – Mitch