QListWidget, к сожалению не подоходит, он слишком прост.
Я сделал в итоге простого наследника QListView:
class AOneColumnListView : public QListView
{
Q_OBJECT
public:
AOneColumnListView(QWidget *parent = 0): QListView(parent) {};
protected:
void selectionChanged(const QItemSelection & selected,
const QItemSelection & deselected)
{
emit currentItemChanged(selected.indexes()[0].row());
};
signals:
void currentItemChanged(int row);
};