Russian Qt Forum
Июля 01, 2025, 13:26 *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

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

Страниц: [1] 2   Вниз
  Печать  
Автор Тема: Редактирование QTableView  (Прочитано 11554 раз)
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.051 секунд. Запросов: 19.