crossplatform.ru

Здравствуйте, гость ( Вход | Регистрация )

 
Ответить в данную темуНачать новую тему
> Непонятное взаимодействие QTableView и обработчика нажатий клавиш
mva
  опции профиля:
сообщение 10.6.2014, 15:58
Сообщение #1


Участник
**

Группа: Участник
Сообщений: 104
Регистрация: 15.3.2009
Из: Киров
Пользователь №: 615

Спасибо сказали: 3 раз(а)




Репутация:   0  


Доброго дня всем!

Долго не могу добиться устранения глюка в своей программе. Глюк состоит в том, мой класс на базе QTableView ведет себя несколько по-разному при добавлении новой строки в модель данных в зависимости от того, пользуюсь я только мышкой при этом или пользуюсь клавиатурой.

Вот я создал строку в документе:


Вот добавил строку, пользуясь мышкой:

Фокус установился на столбце "Количество" как и должно быть.

А вот добавил строку, пользуясь клавиатурой:

Фокус текущей строки и ячейки куда-то убежал. Т.е. если пользоваться только мышкой, то программа работает нормально. Если пользоваться клавиатурой, то возникает вот такой неприятный эффект.


Добавление в обеих случаях происходит с помощью одного и того же куска кода:

        int strNum = appendDocString();     // Открываем нужные справочники перед добавлением строки и добавляем строку в документ
                                            // Возвращаем номер строки в документе
        if (strNum > 0)                         // Если строка была добавлена
        {
            int newRow = tableModel->rowCount();
            if (newRow == 0)                    // Если это первая строка в документе
            {
                query();
                grdTable->selectRow(newRow);
            }
            else
            {                                   // А если не первая, то добавим строку другим способом, позволяющим не загружать
                int column = grdTable->currentIndex().column();     // таблицу с сервера целиком, а только вновь добавленную
                tableModel->insertRow(newRow);                      // строку
                grdTable->reset();
                grdTable->selectRow(newRow);
                updateCurrentRow(strNum);                              // Обновим строку в модели (загрузим с сервера)
                grdTable->selectionModel()->setCurrentIndex(grdTable->currentIndex().sibling(newRow, column), QItemSelectionModel::Select);
            }
            ...


Тут я подозреваю какое-то непонятное взаимодействие QTableView (и его QModelIndex) и моего обработчика нажатий клавиш keyPressEvent.

Подскажите, пожалуйста, в какую сторону копать, чтобы устранить глюк.



Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
mva
  опции профиля:
сообщение 13.6.2014, 17:02
Сообщение #2


Участник
**

Группа: Участник
Сообщений: 104
Регистрация: 15.3.2009
Из: Киров
Пользователь №: 615

Спасибо сказали: 3 раз(а)




Репутация:   0  


Вопрос снимается. Проблема была в коде, который идет непосредственно за указанным куском кода.
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение

Быстрый ответОтветить в данную темуНачать новую тему
Теги
Нет тегов для показа


1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0




RSS Текстовая версия Сейчас: 19.4.2024, 8:32