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

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

Страниц: [1] 2   Вниз
  Печать  
Автор Тема: Редактирование QTableView  (Прочитано 10990 раз)
NetWorm
Гость
« : Август 11, 2011, 17:03 »

Есть таблица заполненная предварительно данными типа |товар|цена|кол|сумма|

Как мне при редактировании ячейки количество или цена, расчитывать сумму и значение записывать в ячейку сумма!!!
Записан
GreatSnake
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 2921



Просмотр профиля
« Ответ #1 : Август 11, 2011, 17:30 »

Читать Программирование модель/представление!!!
Записан

Qt 5.11/4.8.7 (X11/Win)
NetWorm
Гость
« Ответ #2 : Август 11, 2011, 18:59 »

Это я так понимаю мне надо написать Делегат к модели QStandartItemModel?
Записан
GreatSnake
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 2921



Просмотр профиля
« Ответ #3 : Август 11, 2011, 21:16 »

Это я так понимаю мне надо написать Делегат к модели QStandartItemModel?
Неправильно понимаешь. Читай дальше.
Делегат нужен для отображения/редактирования данных.
Тебе же достаточно взять значения ячеек через QAbstractItemModel::data(), сложить их и поместить в результирующую ячейку через QAbstractItemModel::setData().
Записан

Qt 5.11/4.8.7 (X11/Win)
NetWorm
Гость
« Ответ #4 : Август 11, 2011, 21:23 »

Это то понятно! Но как мне определить событие что что была изменена ячейка! через Слот?
вот щас пробую как раз это, но пока не понимаю как слоту передать например индекс!
Записан
GreatSnake
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 2921



Просмотр профиля
« Ответ #5 : Август 11, 2011, 21:29 »

Код
C++ (Qt)
void QAbstractItemModel::dataChanged ( const QModelIndex & topLeft, const QModelIndex & bottomRight ) [signal]
Записан

Qt 5.11/4.8.7 (X11/Win)
NetWorm
Гость
« Ответ #6 : Август 11, 2011, 21:34 »

Код
C++ (Qt)
connect(tempModel,SIGNAL(dataChanged(QModelIndex,QModelIndex)),tempModel,SLOT(editFinish()));
 

но как передать в функцию параметр например текущий индекс или item
Записан
GreatSnake
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 2921



Просмотр профиля
« Ответ #7 : Август 11, 2011, 21:36 »

Код
C++ (Qt)
connect(tempModel,SIGNAL(dataChanged(QModelIndex,QModelIndex)),tempModel,SLOT(editFinish()));
 
но как передать в функцию параметр например текущий индекс или item
Код
C++ (Qt)
connect(tempModel,SIGNAL(dataChanged(QModelIndex,QModelIndex)),tempModel,SLOT(editFinish(QModelIndex)));
Только сигнал нужно вешать после заполнения таблицы или блокировать его перед перезаливкой.
« Последнее редактирование: Август 11, 2011, 21:40 от GreatSnake » Записан

Qt 5.11/4.8.7 (X11/Win)
NetWorm
Гость
« Ответ #8 : Август 11, 2011, 21:39 »

Вот почему тоне получает он индекса сего!!!
Записан
GreatSnake
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 2921



Просмотр профиля
« Ответ #9 : Август 11, 2011, 21:41 »

Вот почему тоне получает он индекса сего!!!
Что значит не получает? Показывай имплементацию editFinish()?
Записан

Qt 5.11/4.8.7 (X11/Win)
NetWorm
Гость
« Ответ #10 : Август 11, 2011, 21:46 »

ВСе!!! Благодарю за помощь получилось!
Записан
NetWorm
Гость
« Ответ #11 : Август 11, 2011, 21:52 »

Тогда еще вопросик. А могу ли я как-то передать например не только индекс, а еще и ссылку на item?
Записан
GreatSnake
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 2921



Просмотр профиля
« Ответ #12 : Август 11, 2011, 22:00 »

Тогда еще вопросик. А могу ли я как-то передать например не только индекс, а еще и ссылку на item?
Не понял про какой айтем идёт речь? QStandardItem?
Код
C++ (Qt)
QStandardItem* itemFromIndex ( const QModelIndex & index ) const
« Последнее редактирование: Август 11, 2011, 22:04 от GreatSnake » Записан

Qt 5.11/4.8.7 (X11/Win)
NetWorm
Гость
« Ответ #13 : Август 11, 2011, 22:04 »

так понятно надо идти в сторону itemData(index);
Записан
NetWorm
Гость
« Ответ #14 : Август 11, 2011, 22:28 »

И все же не пойму как дальше вот есть у меня индекс... Как мне таблице на той же строчки присвоить значение другой ячейке...

Код
C++ (Qt)
void uslStandardItemModel::editFinish(QModelIndex index){
 
   if (index.column() == 2 || index.column() == 4) {
       qDebug() << "Цена:" + itemData(index).value(2).toInt();
       qDebug() << "Кол: " + itemData(index).value(4).toInt();
       double summa = this->itemData(index).value(2).toDouble() * this->itemData(index).value(4).toInt();
       qDebug() << summa;
   }
}
 
Записан
Страниц: [1] 2   Вверх
  Печать  
 
Перейти в:  


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