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

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

Страниц: [1]   Вниз
  Печать  
Автор Тема: Как сменить parent для всех QModelIndex целой строки в QStandardItemModel ?  (Прочитано 3409 раз)
Zmeishe
Гость
« : Июнь 26, 2008, 11:31 »

Qt 4.3.3

Необходимо перенести одну ветку дерева со всеми потомками целиком в другую ветку дерева.
Есть какие-нибудь готовые функции Qt или самому рекурсию крутить ?
Записан
Karl-Philipp
Гость
« Ответ #1 : Июнь 27, 2008, 14:05 »

а пробовали использовать
Цитировать
QStandardItem * QStandardItemModel::takeItem ( int row, int column = 0 )
?

По идее, указатели на дочерние айтемы должны сохраниться в айтеме, который берем.

ну а установить с помощью
Цитировать
void QStandardItem::setChild ( int row, int column, QStandardItem * item )
Записан
Zmeishe
Гость
« Ответ #2 : Июнь 30, 2008, 11:51 »

Спасибо, terlan, навёл на мысль.

Вот окончательный вариант.
Одна тонкость - чтобы у вьюхи не было глюкавостей с перерисовкой, переносимую(вырезаемую) ветку надо свернуть, вызвав вьюхин слот collapse(const QModelIndex & index)
Код:
void MainWindowImpl::on_actionCut_triggered()
{
 QModelIndex idx = tree->model()->index(tree->currentIndex().row(), 0, tree->currentIndex().parent());
 tree->collapse(idx);
 item_cut = ((QStandardItemModel*) tree->model())->itemFromIndex(idx);
 item_cut->setIcon(QIcon(":/new/prefix1/images/mozilla-firebird.png")); // Какая-то иконка, чтобы видно было, что переносим
}

void MainWindowImpl::on_actionPaste_triggered()
{
 QModelIndex idx = tree->model()->index(tree->currentIndex().row(), 0, tree->currentIndex().parent());
 QStandardItem *new_parent_item = item_cut->model()->itemFromIndex(idx);
 QStandardItem *old_parent_item = item_cut->parent();   

 item_cut->setIcon(QIcon());
 QList<QStandardItem*> list = old_parent_item->takeRow(item_cut->row());
 new_parent_item->appendRow(list);
 item_cut = NULL;
}
Переносится вся ветка целиком со всеми вложениями, так как было задумано.
« Последнее редактирование: Июнь 30, 2008, 12:22 от Zmeishe » Записан
Страниц: [1]   Вверх
  Печать  
 
Перейти в:  


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