Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: Непонятное взаимодействие QTableView и обработчика нажатий клавиш
Форум на CrossPlatform.RU > Библиотеки > Qt > Qt Модель/Представление
mva
Доброго дня всем!

Долго не могу добиться устранения глюка в своей программе. Глюк состоит в том, мой класс на базе 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
Вопрос снимается. Проблема была в коде, который идет непосредственно за указанным куском кода.
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.
Форум IP.Board © 2001-2024 IPS, Inc.