// Действия при клике на ветку дереваvoid mainwindow::on_nodetreeview_clicked(const QModelIndex &index){ // Получаем нужную модель TreeItem *item = nodemodel->getItem(index); QAbstractListModel *tabmod = item->recordtable_getmodel(); // Загрузка модели в представление recordview->setModel(tabmod);}
// Слот добавления новой записи в таблицу коннечых записейvoid mainwindow::recordview_add_new(void){ // Получение ссылки на модель таблицы конечных записей recordtablemodel *model=(recordtablemodel *)recordview->model(); // Вставка данных в модель model->insert_new_record("New record in table","Text of new record"); recordview->setModel(model); recordview->update(); recordview->repaint();}
typedef QMap<QString, QString> reclintype; // Тип для одной строки таблицы QList< reclintype > table; // Сама таблица
// Добавление в конец списка новой записиvoid recordtablemodel::insert_new_record(QString name, QString text){ // Создается и заполняется объект одной записи reclintype tmpline; tmpline["name"]=name; tmpline["text"]=text; // Данная запись размещается в таблице записей, которую хранит модель table << tmpline; // Вычисление индекса новой добавленой строки QModelIndex index=this->index(table.size(),1); if(index.isValid()) emit dataChanged(index,index); // Посылается сигнал что данные были изменены else qDebug() << "Error calculate index in recordtablemodel"; }
QModelIndex index=this->index(x,y);
QModelIndex index=this->index(table.size()-1,0,QModelIndex()); qDebug() << this->data(index,Qt::DisplayRole); if(index.isValid()) { qDebug() << "Emit dataChanged()"; emit dataChanged(index,index); // Посылается сигнал что данные были изменены } else qDebug() << "Error calculate index in recordtablemodel";
QVariant(QString, "New record in table")Emit dataChanged()
// Добавление в конец списка новой записиvoid recordtablemodel::insert_new_record(QString name, QString text){ /* говорим, что приспичило нам вставить строку(и), к чему и приступили * если так сделаем, вьюха успеет подготовить свои ресурсы, но не будет пытаться получить данные этой строки, т.к. строка ещё в зародыше и не готова выйти в Мир */ beginInsertRows(QModelIndex(), table.size(), table.size() + 1); // Создается и заполняется объект одной записи reclintype tmpline; tmpline["name"]=name; tmpline["text"]=text; // Данная запись размещается в таблице записей, которую хранит модель table << tmpline; // фактически мы уже заполнили внутреннее хранилище данными для будущей строки. строка уже готова родиться // а теперь орём "огонь!" endInsertRows(); /* в этом месте вьюха уже в обычном режиме отобразила юзверю новорожденную строку. причём, не с перепугу, когда юзверь кликнул "где-то-там", а вьюха переспросила количество строк и внезапно узнала, что у неё добавилось ртов. */ // счастливый конец истории. delete this; // можно помирать :)}