Можно сделать почти все из желаемого
Нужно унаследоваться от QStyledItemDelegate
1. Размер ячейки (максимально желаемый) выдается от делегата с помозью метода sizeHint
При работе с ним есть какие-то тонкости, но если добавить метасвойства к данным то можно менять размеры (но в разумных пределах)
2. Выделение нужно смотреть в методе делегата paint
Например я сделал так
void myClass::paint(QPainter *painter, const QStyleOptionViewItem &option, const QModelIndex &index) const
{
...
//[In case of selection override colour to selection color except mean row]
if(QStyle::State_Selected & option.state)
{
QColor selectedColor = QApplication::palette().color(QPalette::Highlight);
cellBrush = QBrush(selectedColor);
}
//[Fill background]
painter->fillRect(itemRect, cellBrush);
}
Ну и т.д
Желательно прочесть:
qt-project.org/doc/qt-4.8/model-view-programming.html