Решение было найдено с помощью использования глобавльного массива в котором хранится информация о выделении в таблице.
Если кому-то интересно, вот не притендующий на оптимальность код:
QMap<int, bool> selection;
int key;
void MainForm::loadSelection(){
tableContents->clearSelection();
for(uint i=0; i<tableContents->numRows(); i++){
if(selection[i]==true) {
tableContents->selectRow(i);
}
}
}
void MainForm::rememberSelection(){
selection.clear();
for(uint i=0; i<tableContents->numRows(); i++){
selection.replace(i, tableContents->isRowSelected(i));
}
}
void MainForm::tableContents_pressed(int row,int col,int button,const QPoint& pos){
if(key==Qt::Key_Control){
if(*selection.find(row)==true)
{
selection.replace(row, false);
loadSelection();
}
else{
rememberSelection();
}
}
}
void MainForm::keyPressEvent( QKeyEvent * event)
{
key=event->key();
}
void MainForm::keyReleaseEvent( QKeyEvent * event)
{
key=0;
rememberSelection();
}
void MainForm::tableContents_selectionChanged()
{
if(key!=Qt::Key_Control)
rememberSelection();
}