Russian Qt Forum

Qt => Model-View (MV) => Тема начата: Fregloin от Февраль 18, 2015, 15:01



Название: Не могу отследить события мыши в QTableView
Отправлено: Fregloin от Февраль 18, 2015, 15:01
Есть 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)));

Закоментировав эти две строки ничего не поменялось.


Название: Re: Не могу отследить события мыши в QTableView
Отправлено: kambala от Февраль 18, 2015, 15:08
фильтр на ui->tableView->viewport() надо ставить


Название: Re: Не могу отследить события мыши в QTableView
Отправлено: Fregloin от Февраль 18, 2015, 15:24
да уже нашёл решение, спасибо.
Я так понимаю на вьюпорт только мышь ловить, а события клавы на таблице? или все во вьюпорте ловить?


Название: Re: Не могу отследить события мыши в QTableView
Отправлено: kambala от Февраль 18, 2015, 19:27
ну клава же таблицей нормально ловится :)