powered by simpleCommunicator - 2.0.59     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / C++ [игнор отключен] [закрыт для гостей] / Удаление из модели строки Qt.
25 сообщений из 43, страница 1 из 2
Удаление из модели строки Qt.
    #37951705
Katamaran1987
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Имеется модель, к ней присоеденина прокси модель, при удаления получается вот такая ерунда как на картинки в чем я не прав?
...
Рейтинг: 0 / 0
Удаление из модели строки Qt.
    #37951809
White Owl
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ты забыл emit dataChanged()
...
Рейтинг: 0 / 0
Удаление из модели строки Qt.
    #37952084
Katamaran1987
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
White OwlТы забыл emit dataChanged()Интересно и какой области надо сделать dataChanged?
...
Рейтинг: 0 / 0
Удаление из модели строки Qt.
    #37952694
rovan
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Попробуй почитать справку .
Любое изменение данных нужно сопровождать уведомлением об изменении. Уведомление выполняется сигналом.
И, в целом, почитай о создании моделей. Там всё очень подробно расписано.
...
Рейтинг: 0 / 0
Удаление из модели строки Qt.
    #37953538
Katamaran1987
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Вот код
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
void FileItemModel::removeItem(const QModelIndex &index)
{
	file_item_type *item = Fastdir::detail::item<file_item_type*>(index);
			QModelIndex ind = createIndex(0,0,item->parent());
		if (ind.isValid())
		{
			beginRemoveRows(ind, 0, item->parent()->childCount()-1);
			item->parent()->notifyEvent<ITEM_ACTION_REMOVED>(item);
			endRemoveRows();
		}
}
void notifyEventImpl(file_item_type *sender,helper<ITEM_ACTION_REMOVED>)
		{
            base_class::setSize(file_item_type::size()-sender->size());
            m_listDirectory.erase(std::remove(m_listDirectory.begin(),m_listDirectory.end(),sender));
		}

не все так просто, при добавлении датачэнж ничего не изменилось.
...
Рейтинг: 0 / 0
Удаление из модели строки Qt.
    #37953608
rovan
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
А где, собственно, в приведенном коде emit dataChanged?
...
Рейтинг: 0 / 0
Удаление из модели строки Qt.
    #37953705
Katamaran1987
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
rovanА где, собственно, в приведенном коде emit dataChanged? Он не помогает по этому я его убрал.
...
Рейтинг: 0 / 0
Удаление из модели строки Qt.
    #37953739
rovan
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Код метода removeRows приведи.
...
Рейтинг: 0 / 0
Удаление из модели строки Qt.
    #37953884
Katamaran1987
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
rovanКод метода removeRows приведи.Я его даже не реализовывал,зачем он нужен?в методе removeItem(const QModelIndex &index) делается все что должно делать в removeRows разве нет?
...
Рейтинг: 0 / 0
Удаление из модели строки Qt.
    #37954049
rovan
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Чтение документации спасёт отца русской демократии.
Метод необходимо реализовывать. Более того, он обязан возвращать true, если все удалилось успешно.
Реализуй метод, аналогично примеру .
QAbstractItemModel
Код: plaintext
1.
bool QAbstractItemModel::removeRows ( int row, int count, const QModelIndex & parent = QModelIndex() ) 


On models that support this, removes count rows starting with the given row under parent parent from the model.
Returns true if the rows were successfully removed; otherwise returns false.
The base class implementation does nothing and returns false.
If you implement your own model, you can reimplement this function if you want to support removing. Alternatively, you can provide your own API for altering the data.
...
Рейтинг: 0 / 0
Удаление из модели строки Qt.
    #37954125
rovan
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Заодно проверь, не глючит ли у тебя реализация rowCount().
...
Рейтинг: 0 / 0
Удаление из модели строки Qt.
    #37955086
Katamaran1987
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
rovanЗаодно проверь, не глючит ли у тебя реализация rowCount(). Реализовал
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
bool FileItemModel::removeRows(int position, int rows, const QModelIndex &parent)
{
	bool success =false;
	directory_item_type *item = Fastdir::detail::item<directory_item_type*>(parent);
	beginRemoveRows(parent, position, position + rows - 1);
	success = item->notifyEvent<ITEM_ACTION_REMOVED>(item->child(position));
	endRemoveRows();
	return success;
}
void FileItemModel::removeItem(const QModelIndex &index)
{
	file_item_type *item = Fastdir::detail::item<file_item_type*>(index);
	if(item&&isWatchedDir(item))
	{
		if (index.isValid())
		{		
			int row = indexOfChild(item);
			removeRows(row,1,index.parent());
		}
	}
}

результат тотже rowCount не глючит, где в твоем примере вызывается datachanged?
...
Рейтинг: 0 / 0
Удаление из модели строки Qt.
    #37955394
rovan
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Нигде не вызывается. Оно и не нужно, маху дал, это же не редактирование.
Теперь, когда все сделано правильно, осталось только дебажить.
Проверь, возвращается ли в success true.
Убедись, что после удаление rowCount для индекса возвращает меньшее число строк.
Сдаётся мне, проблема во взаимодействии твоего внутренего механизма с кютешной моделью.
...
Рейтинг: 0 / 0
Удаление из модели строки Qt.
    #37957113
Katamaran1987
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
rovan,

Попробовал убрать прокси модель все отрабатывается коректно, какие сигналы я должен подключить к прокси моделе и как мнее ее уведомить а том что я удалил запись, может мне следует перенести удаление в саму прокси модель а не удалять в базовой?
...
Рейтинг: 0 / 0
Удаление из модели строки Qt.
    #37957150
rovan
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Предупреждать надо, что прокси стоит. Да, лучше удалять через прокси.
...
Рейтинг: 0 / 0
Удаление из модели строки Qt.
    #37957155
Katamaran1987
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Katamaran1987rovan,

Попробовал убрать прокси модель все отрабатывается коректно, какие сигналы я должен подключить к прокси моделе и как мнее ее уведомить а том что я удалил запись, может мне следует перенести удаление в саму прокси модель а не удалять в базовой?В первой строчке поста написано.
...
Рейтинг: 0 / 0
Удаление из модели строки Qt.
    #37957156
Katamaran1987
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
rovanПредупреждать надо, что прокси стоит. Да, лучше удалять через прокси.В первой строчки поста написано))
...
Рейтинг: 0 / 0
Удаление из модели строки Qt.
    #37957162
Katamaran1987
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
rovanПредупреждать надо, что прокси стоит. Да, лучше удалять через прокси.То есть я удаление расписываю в прокси а уведомляю базовую?или удаляю из базовой а уведомляю прокси? счас у меня 2ой способ
...
Рейтинг: 0 / 0
Удаление из модели строки Qt.
    #37957210
rovan
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Не знаю насчет того, есть ли уведомление прокси из базовой, исходы смотреть нужно.
Попробуй просто вызывать удаление из прокси по индексу прокси. Мб там уже что-то придумано на этот счет, и оно форвардится в базовую модель.
...
Рейтинг: 0 / 0
Удаление из модели строки Qt.
    #37958794
Katamaran1987
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
rovanНе знаю насчет того, есть ли уведомление прокси из базовой, исходы смотреть нужно.
Попробуй просто вызывать удаление из прокси по индексу прокси. Мб там уже что-то придумано на этот счет, и оно форвардится в базовую модель.Из базовой удаляю и уведомляю прокси обновление проходит успешно, ошибка была в rowCount прокси модели, а вот инсерт пока не работает, чем он отличается от удаления?Код в примерах идентичный по смыслу.
...
Рейтинг: 0 / 0
Удаление из модели строки Qt.
    #37959736
rovan
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Я хрустальный шар разбил, так что, выложи полный код модели и её использования, либо брось на почту.
...
Рейтинг: 0 / 0
Удаление из модели строки Qt.
    #37959820
Katamaran1987
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
rovanЯ хрустальный шар разбил, так что, выложи полный код модели и её использования, либо брось на почту.Нет смысла вылаживать код он валится если удалять поочередно больше одной записи, http://stackoverflow.com/questions/12436353/insert-and-delete-rows-in-qtreeview вот моя тема также на stackoverflow все не так просто как кажется.
...
Рейтинг: 0 / 0
Удаление из модели строки Qt.
    #37959827
Katamaran1987
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Может у кого нибудь есть предложения как использовать одну модель для 4 вьюшек сразу?Сейчас я зовел один главный рут и от него отходят дети, расшарил этого рута среди создаваемых моделей тоесть все модели ссылаются на одного рута, и эту модель еще долбят несколько потоков, для этого был придуман класс
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
void Notifaer::dataChange(void * item){emit dataChanged(item);}
        void Notifaer::remove(void * item){emit removed(item);}
        void Notifaer::insert(void * item){emit inserted(item);}
        void Notifaer::push_back(const FileItemModel * model)
        {
            VERIFY(QObject::connect(this,SIGNAL(dataChanged(void*)),model,SLOT(dataChangeItem(void*)) ));
            VERIFY(QObject::connect(this,SIGNAL(removed(void*)),model,SLOT(removeItem(void*)) ));
            VERIFY(QObject::connect(this,SIGNAL(inserted(void*)),model,SLOT(insertItem(void*)) ));
        }

чтоб хоть както синхранизировать уведомления в модель.
...
Рейтинг: 0 / 0
Удаление из модели строки Qt.
    #37959878
rovan
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Katamaran1987 все не так просто как кажется
Само собой, все намного проще.
Модель на то и модель, что ей по барабану, какое количество вьюх на неё смотрит.
В тех редких случаях, когда это не так, стоит использовать прокси.
У тебя придуман уведомляющий велосипед, что заставляет задуматься об ошибке проектирования.
Покажи полный код модели, прокси и их взаимодействия, и тебе, может быть, ткнут пальцем в ошибку.
Иначе будут тыкать пальцем в небо, с весьма малыми шансами попасть в нужное место.
...
Рейтинг: 0 / 0
Удаление из модели строки Qt.
    #37959885
Katamaran1987
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
rovanKatamaran1987 все не так просто как кажется
Само собой, все намного проще.
Модель на то и модель, что ей по барабану, какое количество вьюх на неё смотрит.
В тех редких случаях, когда это не так, стоит использовать прокси.
У тебя придуман уведомляющий велосипед, что заставляет задуматься об ошибке проектирования.
Покажи полный код модели, прокси и их взаимодействия, и тебе, может быть, ткнут пальцем в ошибку.
Иначе будут тыкать пальцем в небо, с весьма малыми шансами попасть в нужное место.Ладно вечером выложу эпопею.
...
Рейтинг: 0 / 0
25 сообщений из 43, страница 1 из 2
Форумы / C++ [игнор отключен] [закрыт для гостей] / Удаление из модели строки Qt.
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]