2016-11-07 2 views
0

Я добавляю QGraphicsPixmapItems в свою сцену, и я вижу, что когда я выбираю элемент, он получает белый прямоугольник выбора, но я изо всех сил пытаюсь получить любые данные из этого выбора. Вот как я добавляю его на сцену.Определите, какой QPixmapItem был выбран

void MainWindow::drawImage(curTarget *newTarget){ 
    QGraphicsPixmapItem *tgt = new QGraphicsPixmapItem;//new pixmap 
    tgt = scene->addPixmap(newTarget->myIcon);//assign pixmap image 
    tgt->setFlag(QGraphicsItem::ItemIsSelectable, true); 
    scene->addItem(tgt); 

}

Каждый PixmapItem, что добавить к сцене есть данные структуры, связанные с ним, и мне нужно, чтобы иметь возможность получить эти данные при выборе на QGraphicsPixmapItem внутри QGraphicsScene. Если прямоугольник выделения отображается, когда выбран pixmapitem, нет ли там простого способа вернуть мне информацию на основе этого факта? Указатель на то, что выбрано, возможно?

У меня есть метод mousePressEvent, но я борюсь за то, чтобы что-то касалось этого.

void MainWindow::mousePressEvent(QMouseEvent *event){ 
qDebug() << "Clicked" << endl; 
} 

Когда я запустить приложение, я вижу щелчок везде в моей сцене, за исключением, когда я нажимаю на моей pixmapitems.

Я пробовал каждую версию mousePressEvents и те, которые на самом деле что-то делают, только делайте что-нибудь, пока я не нажимаю на свои pixmapitems.

+1

QGraphicsScene :: SelectedItems() ? – jpnurmi

+0

'mousePressEvent (событие QGraphicsSceneEvent *) { qDebug() << scene-> selectedItems(); } '}' ничего не возвращает – bauervision

+1

Вместо того, чтобы переопределять 'mousePressEvent', создайте функцию, которая проверяет текущий выбор и связывает его с [' QGraphicsScene :: selectionChanged'] (http://doc.qt.io/qt-5/ qgraphicsscene.html # selectionChanged). –

ответ

0

Спасибо, что я получил в своих комментариях, я опубликую, что в конечном итоге сработало для меня.

 void MainWindow::drawImage(curTarget *newTarget) 
    { 
     QGraphicsPixmapItem *tgt = new QGraphicsPixmapItem 
     tgt = scene->addPixmap(newTarget->myIcon); 
     tgt->setFlag(QGraphicsItem::ItemIsSelectable, true); 
     scene->addItem(tgt); 
    } 

С новой функцией добавил ...

void MainWindow::whatIsSelected(){ 
QDebug() <<scene->selectedItems() << endl;} 

И тогда я сделал связь сцены к окну в другом месте ...

QObject::connect(scene, SIGNAL(selectionChanged()), this, SLOT(whatIsSelected); 
+0

Это нормально, если вы вызываете drawImage только один раз, но каждый раз, когда вы вызываете «connect», он создает новое соединение, не удаляя старый.Если вы добавите много изображений, метод «whatIsSlect» начнет получать вызовы много раз при каждом изменении выбора. Либо переместите вызов «connect» в другом месте, чтобы он был выполнен только один раз, либо добавьте тип подключения Qt :: UniqueConnection к вызову «connect». – goug

+0

Мне определенно нужно, чтобы он добавлялся к каждому элементу, который я создаю. Моим пользователям потребуется возможность выбирать/отменить выбор так часто, как они хотят, чтобы исследовать связанные данные. И будет добавлено большое количество изображений. – bauervision

+0

отредактировал мой ответ, чтобы включить ваш – bauervision

Смежные вопросы