Название: Обновление данных 
					Отправлено: proton от Октября 31, 2009,  18:39
					 
					Разбираюсь в MVC... Создал простую форму с TableView, двумя LineEdit и кнопкой. Также сделал простенькую модель: #include <QAbstractTableModel> #include <QVector> #include <QString>
  struct md { 	QString id; 	QString text; };
  class mymodel : public QAbstractTableModel { public: 	mymodel(); 	int rowCount(const QModelIndex & = QModelIndex()) const; 	int columnCount(const QModelIndex & = QModelIndex()) const; 	QVariant data(const QModelIndex &index, int role) const; 	// 	void append(QString id, QString text); private: 	QVector<md> list; };
  mymodel::mymodel() {}
  int mymodel::rowCount(const QModelIndex &) const { 	return list.size(); } int mymodel::columnCount(const QModelIndex &) const { 	return 2; }
  void mymodel::append(QString id, QString text) { 	md m; 	m.id = id; 	m.text = text; 	list.append(m); 	/*insertRow(list.size()-1); 	for(int i=0; i<columnCount(); ++i) 	{ 		QModelIndex ModelIndex = index(list.size()-1, i, QModelIndex()); 		emit dataChanged(ModelIndex, ModelIndex); 	}*/ }
  QVariant mymodel::data(const QModelIndex &index, int role) const { 	if(!index.isValid()) return QVariant(); 	if(role == Qt::DisplayRole) 	{ 		switch (index.column()) 		{ 			case 0: return list[index.row()].id; 			case 1: return list[index.row()].text; 			default: return QVariant(); 		} 	} 	return QVariant(); } По клику на кнопке добавляю данные: void MainWindow::on_but_clicked() { 	model.append(ui->ed0->text(), ui->ed1->text()); 	//ui->tw->update(); } Проблема в том, что ничего не меняется...  
					 
					 
					Название: Re: Обновление данных 
					Отправлено: Mikhail от Октября 31, 2009,  18:51
					 
					Попробуй посмотреть примеры Qt. Используй setData вместо append 
					 
					 
					Название: Re: Обновление данных 
					Отправлено: MoPDoBoPoT от Октября 31, 2009,  19:21
					 
					Используй setData вместо append
  Он хочет добавлять строку с данными, а не изменять их. Для этого надо переопределить метод insertRows() примерно так: C++ (Qt) bool mymodel::insertRows(int row, int count/* = 1*/, const QModelIndex &parent/* = QModelIndex()*/) {     if ((count < 1) || (row < 0) || (row > list.size()))         return false;       beginInsertRows(QModelIndex(), row, row + count - 1);     list.resize(list.size() + count);     endInsertRows();     return true; }  
 а метод append() изменить на: C++ (Qt) void mymodel::append(QString id, QString text) {     if (insertRow(list.size()) {         list.last.id = id;         ist.last.text = text;     } }  
  
					 
					 
					Название: Re: Обновление данных 
					Отправлено: proton от Октября 31, 2009,  19:41
					 
					Используй setData вместо append
  Он хочет добавлять строку с данными, а не изменять их. Для этого надо переопределить метод insertRows() примерно так: C++ (Qt) bool mymodel::insertRows(int row, int count/* = 1*/, const QModelIndex &parent/* = QModelIndex()*/) {     if ((count < 1) || (row < 0) || (row > list.size()))         return false;       beginInsertRows(QModelIndex(), row, row + count - 1);     list.resize(list.size() + count);     endInsertRows();     return true; }  
 а метод append() изменить на: C++ (Qt) void mymodel::append(QString id, QString text) {     if (insertRow(list.size()) {         list.last.id = id;         ist.last.text = text;     } }  
 Большое спасибо, работает!  
					
  
					
				 |