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

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

Страниц: [1]   Вниз
  Печать  
Автор Тема: QStandardItemModel. Получить обратно параметры ячейки таблицы  (Прочитано 6269 раз)
NicK
Гость
« : Июль 20, 2010, 00:21 »

Подскажите, пожалуйста. Никак не могу разобраться. Грустный

Есть своя модель, унаследованная от QStandardItemModel.
Код
C++ (Qt)
MyModel::MyModel(QObject *parent): QStandardItemModel(parent)
{
}
 
Qt::ItemFlags MyModel::flags(const QModelIndex &index) const
{
    Qt::ItemFlags flags = QStandardItemModel::flags(index);
 
    if (index.column() == 0 )flags |= Qt::ItemIsUserCheckable;
 
    return flags;
}
 
QVariant MyModel::data(const QModelIndex &index, int role) const
{
     QVariant value = QStandardItemModel::data(index, role);
     switch (role) {
 
     case Qt::DisplayRole: // Data to display
         if (index.column() == 1){
             if (value.toInt() == 1)return tr("NEW");
             else if (value.toInt() == 2)return tr("DELETED");
             else if (value.toInt() == 3)return tr("EDITED");
         }
         else return value;
 
       ...
 
 
     }
     return value;
 }
 
т.е. в некоторых столбцах ячейки модели изначально содержат целочисленные номера, а я вместо них надо отображаю слова.
Для вывода на печать, на основе модели генерирую html код, который потом вывожу на принтер через QTextDocument.
Данные из модели беру следующим образом:
Код
C++ (Qt)
     ...
 
      strlstTemplate<<"<TABLE BORDER=0 WIDTH=100% CELLSPACING=1 CELLPADDING=5 BGCOLOR=white FRAME=void>";
      for (int row=0; row<=model.rowCount()-1;row++){
   for (int column=0;column<=model.columnCount()-1;column++){
               QStandardItem *itm = model.item(row,column);
strTableRow+="<TD>"+itm->data(Qt::DisplayRole).toString()+"</TD>";
   };
         strlstTemplate<<"<TR>"<<strTableRow<<"</TR>";
         strTableRow="";
      };
 
     ...
 
          strlstTemplate<<"</TBODY>";
          strlstTemplate<<"</TABLE>";
 
 
Но, таким образом, я получаю изначальное состояние данных ячеек модели, где все еще в ячейках хранятся цифры 1, 2 и 3, а не нужные мне слова NEW, DELETED и EDITED.
Вопрос в следующем: как можно получить уже измененные данные ячеек (т.е. с уже переопределенными данными, где числа заменены словами)?

« Последнее редактирование: Июль 20, 2010, 12:14 от NicK » Записан
NicK
Гость
« Ответ #1 : Июль 20, 2010, 10:44 »

Объясните, плиз, есть ли возможность получать из модели не первоначальные, а именно те данные, которые возвращает MyModel::data Непонимающий
А то я совсем запутался  Грустный
Записан
crossly
Гость
« Ответ #2 : Июль 20, 2010, 11:07 »

данные для отображения выводить желательно ролью Qt::DisplayRole .... ну и соответственно
Код:
strTableRow+="<TD>"+itm->data(Qt::DisplayRole).toString()+"</TD>";
Записан
NicK
Гость
« Ответ #3 : Июль 20, 2010, 12:11 »

Вот таким образом я заполняю модель:
  
Код
C++ (Qt)
model=new MyModel;
   QList<QStandardItem*>lstRow;
   for (int row=0;row<10;++row){
       for (int column=0;column<4;++column){
           QStandardItem *itm=new QStandardItem;
           itm->setData(row,Qt::DisplayRole);
           lstRow<<itm;
       };
       model->appendRow(lstRow);
       lstRow.clear();
   }

Вот как оно выглядит:


Но результат выполнения следующего кода отображает изначально введенные данные в модель, а не те, что были переопределены для отображения в MyModel::data.
Код
C++ (Qt)
       for (int row=0;row<model->rowCount();++row){
           for (int column=0;column<model->columnCount();++column){
               qDebug()<<"row"<<row<<"column"<<column<<model->item(row,column)->data(Qt::DisplayRole);
           }
       }
 
Вот вывод:
Код:
row 0 column 0 QVariant(int, 0) 
row 0 column 1 QVariant(int, 0)
row 0 column 2 QVariant(int, 0)
row 0 column 3 QVariant(int, 0)
row 1 column 0 QVariant(int, 1)
row 1 column 1 QVariant(int, 1)
row 1 column 2 QVariant(int, 1)
row 1 column 3 QVariant(int, 1)
row 2 column 0 QVariant(int, 2)
row 2 column 1 QVariant(int, 2)
row 2 column 2 QVariant(int, 2)
row 2 column 3 QVariant(int, 2)
row 3 column 0 QVariant(int, 3)
row 3 column 1 QVariant(int, 3)
row 3 column 2 QVariant(int, 3)
row 3 column 3 QVariant(int, 3)
row 4 column 0 QVariant(int, 4)
row 4 column 1 QVariant(int, 4)
row 4 column 2 QVariant(int, 4)
row 4 column 3 QVariant(int, 4)
row 5 column 0 QVariant(int, 5)
row 5 column 1 QVariant(int, 5)
row 5 column 2 QVariant(int, 5)
row 5 column 3 QVariant(int, 5)
row 6 column 0 QVariant(int, 6)
row 6 column 1 QVariant(int, 6)
row 6 column 2 QVariant(int, 6)
row 6 column 3 QVariant(int, 6)
row 7 column 0 QVariant(int, 7)
row 7 column 1 QVariant(int, 7)
row 7 column 2 QVariant(int, 7)
row 7 column 3 QVariant(int, 7)
row 8 column 0 QVariant(int, 8)
row 8 column 1 QVariant(int, 8)
row 8 column 2 QVariant(int, 8)
row 8 column 3 QVariant(int, 8)
row 9 column 0 QVariant(int, 9)
row 9 column 1 QVariant(int, 9)
row 9 column 2 QVariant(int, 9)
row 9 column 3 QVariant(int, 9)


Есть ли способ получить данные, которые переопределены в ::data моей модели???
« Последнее редактирование: Июль 20, 2010, 12:40 от NicK » Записан
NicK
Гость
« Ответ #4 : Июль 20, 2010, 13:03 »

Выложил компилябельные исходники примера http://ifolder.ru/18600261
Помогите, пожалуйста. Что я не так делаю?
« Последнее редактирование: Июль 20, 2010, 13:08 от NicK » Записан
Авварон
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 3260


Просмотр профиля
« Ответ #5 : Июль 20, 2010, 13:16 »

не юзайте метод дата у айтема. Он возвращает то, что вы в него запихнули (то есть число)
Записан
NicK
Гость
« Ответ #6 : Июль 20, 2010, 13:30 »

не юзайте метод дата у айтема. Он возвращает то, что вы в него запихнули (то есть число)

Спасибо огромное за подсказку.
Сделал так и все заработало:
 
Код
C++ (Qt)
  for (int row=0;row<model->rowCount();++row){
           for (int column=0;column<model->columnCount();++column){
               //qDebug()<<"row"<<row<<"column"<<column<<model->item(row,column)->data(Qt::DisplayRole);
               qDebug()<<"row"<<row<<"column"<<column<<model->data(model->index(row,column),Qt::DisplayRole);
           }
   }

Еще раз огромное спасибо. Сам бы не скоро догадался.

ТЕМА ЗАКРЫТА
« Последнее редактирование: Июль 20, 2010, 13:32 от NicK » Записан
Страниц: [1]   Вверх
  Печать  
 
Перейти в:  


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