Название: QStandardItemModel. Получить обратно параметры ячейки таблицы
Отправлено: 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. Вопрос в следующем: как можно получить уже измененные данные ячеек (т.е. с уже переопределенными данными, где числа заменены словами)?
Название: Re: QStandardItemModel. Получить обратно параметры ячейки таблицы
Отправлено: NicK от Июль 20, 2010, 10:44
Объясните, плиз, есть ли возможность получать из модели не первоначальные, а именно те данные, которые возвращает MyModel::data ??? А то я совсем запутался :(
Название: Re: QStandardItemModel. Получить обратно параметры ячейки таблицы
Отправлено: crossly от Июль 20, 2010, 11:07
данные для отображения выводить желательно ролью Qt::DisplayRole .... ну и соответственно strTableRow+="<TD>"+itm->data(Qt::DisplayRole).toString()+"</TD>";
Название: Re: QStandardItemModel. Получить обратно параметры ячейки таблицы
Отправлено: NicK от Июль 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(); }
Вот как оно выглядит: (http://img22.imageshack.us/img22/7174/28903857.png) Но результат выполнения следующего кода отображает изначально введенные данные в модель, а не те, что были переопределены для отображения в 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 моей модели???
Название: Re: QStandardItemModel. Получить обратно параметры ячейки таблицы
Отправлено: NicK от Июль 20, 2010, 13:03
Выложил компилябельные исходники примера http://ifolder.ru/18600261 (http://ifolder.ru/18600261) Помогите, пожалуйста. Что я не так делаю?
Название: Re: QStandardItemModel. Получить обратно параметры ячейки таблицы
Отправлено: Авварон от Июль 20, 2010, 13:16
не юзайте метод дата у айтема. Он возвращает то, что вы в него запихнули (то есть число)
Название: Re: QStandardItemModel. Получить обратно параметры ячейки таблицы
Отправлено: NicK от Июль 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); } }
Еще раз огромное спасибо. Сам бы не скоро догадался. ТЕМА ЗАКРЫТА
|