Russian Qt Forum
Ноябрь 23, 2024, 07:36 *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

Войти
 
  Начало   Форум  WIKI (Вики)FAQ Помощь Поиск Войти Регистрация  

Страниц: [1]   Вниз
  Печать  
Автор Тема: Не могу отследить события мыши в QTableView  (Прочитано 4119 раз)
Fregloin
Супер
******
Offline Offline

Сообщений: 1025


Просмотр профиля
« : Февраль 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)));

Закоментировав эти две строки ничего не поменялось.
Записан
kambala
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 4747



Просмотр профиля WWW
« Ответ #1 : Февраль 18, 2015, 15:08 »

фильтр на ui->tableView->viewport() надо ставить
Записан

Изучением C++ вымощена дорога в Qt.

UTF-8 has been around since 1993 and Unicode 2.0 since 1996; if you have created any 8-bit character content since 1996 in anything other than UTF-8, then I hate you. © Matt Gallagher
Fregloin
Супер
******
Offline Offline

Сообщений: 1025


Просмотр профиля
« Ответ #2 : Февраль 18, 2015, 15:24 »

да уже нашёл решение, спасибо.
Я так понимаю на вьюпорт только мышь ловить, а события клавы на таблице? или все во вьюпорте ловить?
Записан
kambala
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 4747



Просмотр профиля WWW
« Ответ #3 : Февраль 18, 2015, 19:27 »

ну клава же таблицей нормально ловится Улыбающийся
Записан

Изучением C++ вымощена дорога в Qt.

UTF-8 has been around since 1993 and Unicode 2.0 since 1996; if you have created any 8-bit character content since 1996 in anything other than UTF-8, then I hate you. © Matt Gallagher
Страниц: [1]   Вверх
  Печать  
 
Перейти в:  


Страница сгенерирована за 0.136 секунд. Запросов: 23.