I leave you include the include files that need to be included :-) This class also prevent dragging items, but you certainly don't want that. ::::::::::::::::: THE INCLUSION FILE ::::::::::::::::: /** The class KIconView allow to drag items. We don't want to, so we disable it. * This class also unselect the selected item when the user right click an empty space. We don't want to, so we reselect it if that happens. * @author Sébastien Laoût */ class SingleSelectionKIconView : public KIconView { Q_OBJECT public: SingleSelectionKIconView(QWidget *parent = 0, const char *name = 0, WFlags f = 0); QDragObject* dragObject(); QIconViewItem* selectedItem() { return m_lastSelected; } private slots: void slotSelectionChanged(QIconViewItem *item); void slotSelectionChanged(); private: QIconViewItem *m_lastSelected; }; ::::::::::::::::: THE CODE FILE ::::::::::::::::: /** class SingleSelectionKIconView: */ SingleSelectionKIconView::SingleSelectionKIconView(QWidget *parent, const char *name, WFlags f) : KIconView(parent, name, f), m_lastSelected(0) { connect( this, SIGNAL(selectionChanged(QIconViewItem*)), this, SLOT(slotSelectionChanged(QIconViewItem*)) ); connect( this, SIGNAL(selectionChanged()), this, SLOT(slotSelectionChanged()) ); } QDragObject* SingleSelectionKIconView::dragObject() { return 0; } void SingleSelectionKIconView::slotSelectionChanged(QIconViewItem *item) { if (item) m_lastSelected = item; } void SingleSelectionKIconView::slotSelectionChanged() { if (m_lastSelected && !m_lastSelected->isSelected()) m_lastSelected->setSelected(true); }