Есть QTableView в которой отображается модель с объектами.
Есть еще несколько QTableView и QComboBox в которых отображается конфигурация объекта из первого QTableView.
Нужно отследить изменение свойств объекта в правой части окна, и при переходе к другой строке в левой таблице
выдать окно с сообщением что есть несохраненные данные. Пользователь может сохранить и перейти к новому объекту,
вернуться к редактированию текущего или перейти к новому объекту без сохранения изменений с правой стороны.
Для этого я установил eventFilter на правую таблицу.
bool ConfigureActionsDialog::eventFilter(QObject * o, QEvent * e)
{
if(o==ui->tableView)
{
//qDebug("type %d",e->type());
switch (e->type()) {
case QEvent::KeyPress:
{
QKeyEvent * keyEvent = static_cast<QKeyEvent*>(e);
switch (keyEvent->key()) {
case Qt::Key_Insert:
if(fchanged)
{
switch (showNotSavedDialog()) {
case QMessageBox::Ignore:
fchanged = false;
return false;
case QMessageBox::Save:
on_applyButton_clicked();
return false;
default:
return true;
}
}
on_appendButton_clicked();
return true;
case Qt::Key_Delete:
on_deleteAllButton_clicked();
return true;
case Qt::Key_Return:
case Qt::Key_Enter:
case Qt::Key_Home:
case Qt::Key_Up:
if(fchanged)
{
switch (showNotSavedDialog()) {
case QMessageBox::Ignore:
fchanged = false;
return false;
case QMessageBox::Save:
on_applyButton_clicked();
return false;
default:
return true;
}
}
break;
default:
break;
}
}
break;
case QEvent::MouseButtonRelease:
{
QMouseEvent * mouseEvent = static_cast<QMouseEvent*>(e);
if(mouseEvent->button()==Qt::LeftButton)
{
if(fchanged)
{
switch (showNotSavedDialog()) {
case QMessageBox::Ignore:
fchanged = false;
return false;
case QMessageBox::Save:
on_applyButton_clicked();
return false;
default:
return true;
}
}
}
}
break;
default:
break;
}
}
return QDialog::eventFilter(o,e);
}
в конструкторе задаю фильтр
ui->tableView->installEventFilter(this);
Проблема в том что события мыши не приходят вообще (я выводил в консоль тип события). События с клавиатуры приходят нормально.
Такое ощущение что сюда они не доходят. Как быть?
Нужно что бы осталживалось перемещение по таблице не только мышью но и с клавы.
Для отслеживания нажатия мыши я использовал
QItemSelectionModel * selectionModel = ui->tableView->selectionModel();
connect(selectionModel,SIGNAL(currentRowChanged(QModelIndex,QModelIndex)),this,SLOT(selection_changed(QModelIndex,QModelIndex)));
Закоментировав эти две строки ничего не поменялось.