#include #include class MyItem : public QGraphicsRectItem { public: using QGraphicsRectItem::QGraphicsRectItem; protected: QVariant itemChange( GraphicsItemChange change, const QVariant& value ) { // we want this item to be selected, no matter how setSelected() was called if ( change == ItemSelectedChange ) { return true; } return QGraphicsRectItem::itemChange( change, value ); } }; void testQtBug_85474() { QGraphicsScene scene; MyItem* pMyItem = new MyItem; pMyItem->setFlag( QGraphicsItem::ItemIsSelectable ); pMyItem->setRect( 0, 0, 50, 50 ); scene.addItem( pMyItem ); pMyItem->setSelected( true ); Q_ASSERT( !scene.selectedItems().isEmpty() ); scene.clearSelection(); Q_ASSERT( pMyItem->isSelected() ); // MyItem cannot be deselected Q_ASSERT( !scene.selectedItems().isEmpty() ); // inconsistent internal state delete pMyItem; }