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

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

Страниц: [1]   Вниз
  Печать  
Автор Тема: QTableView внесение данных ячейки таблицы  (Прочитано 5684 раз)
demaker
Птица говорун
*****
Offline Offline

Сообщений: 960


Просмотр профиля
« : Октябрь 27, 2016, 17:28 »

Пытаюсь добавить строку в таблицу.
вот код:
Код
C++ (Qt)
bool DataBaseModel::prepareInsertData()
{
   if(!finsert){
       int row = rowCount(QModelIndex());
       int amountColumn = columnCount(QModelIndex());
       beginInsertRows(QModelIndex(),row,row);
       QStringList * dataRecord = new QStringList;
       for(int i = 0; i < amountColumn; dataRecord->append(""),i++);
       dataRecords.append(dataRecord);
       insertRecords.append(dataRecord);
       endInsertRows();
       finsert = true;        
   }    
}
 
void TableView::keyPressEvent(QKeyEvent *event)
{
   DataBaseModel* dataBaseModel = (DataBaseModel*)(((DataBaseFilterModel*)model())->sourceModel());
   switch(event->key()){
       case Qt::Key_Insert:{
           qDebug()<<"insert";
           dataBaseModel->prepareInsertData();            
           int row = dataBaseModel->rowCount(QModelIndex());
           if(row > dataBaseModel->getCountDataBaseRecords()){
               QModelIndex index = dataBaseModel->index(row - 1,1);
               selectionModel()->setCurrentIndex(index, QItemSelectionModel::ClearAndSelect|QItemSelectionModel::SelectCurrent);
               scrollToBottom();
           }
           break;
       }
   }
}
 

Вроде все замечательно и работает
Добавляется пустая строчка и мы начинаем ее редактировать.

Только вот загвоздка - ячейку я выделил
Код:
selectionModel()->setCurrentIndex(index, QItemSelectionModel::ClearAndSelect|QItemSelectionModel::SelectCurrent)
,а отредактировать ее не могу(набирая текст).
Хотя когда я перехожу на другую ячейку (с помощью мыши или клавиатуры)то при на боре текста все в порядке - она редактируется.

Скажите , как решить эту проблему???
« Последнее редактирование: Октябрь 28, 2016, 11:10 от demaker » Записан
break
Гипер активный житель
*****
Offline Offline

Сообщений: 846


Просмотр профиля
« Ответ #1 : Октябрь 28, 2016, 01:42 »

В DataBaseModel не определен случайно метод flags, который по номеру колонки может убирать флаг редактирования?
Записан
demaker
Птица говорун
*****
Offline Offline

Сообщений: 960


Просмотр профиля
« Ответ #2 : Октябрь 28, 2016, 09:42 »

В DataBaseModel не определен случайно метод flags, который по номеру колонки может убирать флаг редактирования?

Да нет, не должен.

Код
C++ (Qt)
Qt::ItemFlags DataBaseModel::flags(const QModelIndex &index) const
{
   Qt::ItemFlags flags = QAbstractTableModel::flags(index);
   flags |= Qt::ItemIsEditable;    
   return flags;
}
 


Записан
break
Гипер активный житель
*****
Offline Offline

Сообщений: 846


Просмотр профиля
« Ответ #3 : Октябрь 29, 2016, 02:36 »

Кажется там надо установить (или по крайне мере проверить)  QAbstractItemView::AnyKeyPressed в void   setEditTriggers(EditTriggers triggers) для QTableView

Флаг битный:

QAbstractItemView::NoEditTriggers   0   No editing possible.
QAbstractItemView::CurrentChanged   1   Editing start whenever current item changes.
QAbstractItemView::DoubleClicked   2   Editing starts when an item is double clicked.
QAbstractItemView::SelectedClicked   4   Editing starts when clicking on an already selected item.
QAbstractItemView::EditKeyPressed   8   Editing starts when the platform edit key has been pressed over an item.
QAbstractItemView::AnyKeyPressed   16   Editing starts when any key is pressed over an item.
QAbstractItemView::AllEditTriggers   31   Editing starts for all above actions.
Записан
demaker
Птица говорун
*****
Offline Offline

Сообщений: 960


Просмотр профиля
« Ответ #4 : Октябрь 29, 2016, 08:27 »

Кажется там надо установить (или по крайне мере проверить)  QAbstractItemView::AnyKeyPressed в void   setEditTriggers(EditTriggers triggers) для QTableView

Флаг битный:

QAbstractItemView::NoEditTriggers   0   No editing possible.
QAbstractItemView::CurrentChanged   1   Editing start whenever current item changes.
QAbstractItemView::DoubleClicked   2   Editing starts when an item is double clicked.
QAbstractItemView::SelectedClicked   4   Editing starts when clicking on an already selected item.
QAbstractItemView::EditKeyPressed   8   Editing starts when the platform edit key has been pressed over an item.
QAbstractItemView::AnyKeyPressed   16   Editing starts when any key is pressed over an item.
QAbstractItemView::AllEditTriggers   31   Editing starts for all above actions.

Спасибо попробую.
О результатах напишу в понедельник  Улыбающийся
Записан
demaker
Птица говорун
*****
Offline Offline

Сообщений: 960


Просмотр профиля
« Ответ #5 : Октябрь 31, 2016, 13:12 »

Кажется там надо установить (или по крайне мере проверить)  QAbstractItemView::AnyKeyPressed в void   setEditTriggers(EditTriggers triggers) для QTableView

Флаг битный:

QAbstractItemView::NoEditTriggers   0   No editing possible.
QAbstractItemView::CurrentChanged   1   Editing start whenever current item changes.
QAbstractItemView::DoubleClicked   2   Editing starts when an item is double clicked.
QAbstractItemView::SelectedClicked   4   Editing starts when clicking on an already selected item.
QAbstractItemView::EditKeyPressed   8   Editing starts when the platform edit key has been pressed over an item.
QAbstractItemView::AnyKeyPressed   16   Editing starts when any key is pressed over an item.
QAbstractItemView::AllEditTriggers   31   Editing starts for all above actions.

Спасибо попробую.
О результатах напишу в понедельник  Улыбающийся

К сожалению не помогло В замешательстве
Записан
demaker
Птица говорун
*****
Offline Offline

Сообщений: 960


Просмотр профиля
« Ответ #6 : Октябрь 31, 2016, 13:27 »

Сделал вот так:
Код
C++ (Qt)
   DataBaseModel* dataBaseModel = (DataBaseModel*)(((DataBaseFilterModel*)model())->sourceModel());
   switch(event->key()){
       case Qt::Key_Insert:{
           qDebug()<<"insert";
           dataBaseModel->prepareInsertData();            
           int row = dataBaseModel->rowCount(QModelIndex());
           if(row > dataBaseModel->getCountDataBaseRecords()){
               QModelIndex index = ((DataBaseFilterModel*)model())->mapFromSource(dataBaseModel->index(row - 1,1));
               selectionModel()->setCurrentIndex(index, QItemSelectionModel::ClearAndSelect|
                                                        QItemSelectionModel::SelectCurrent|
                                                        QItemSelectionModel::NoUpdate);          //выделяем индекс
 
               setCurrentIndex(index);
               scrollToBottom();
               edit(index);
           }
           break;
       }
 
     }
 

Помогло  Улыбающийся
Записан
Страниц: [1]   Вверх
  Печать  
 
Перейти в:  


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