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

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

Страниц: [1]   Вниз
  Печать  
Автор Тема: абсолютный индекс элемента QtreeWidget  (Прочитано 7942 раз)
алексей
Гость
« : Январь 19, 2009, 14:44 »

Здравствуйте !! Как я понимаю для определения индекса элемента в QtreeWidget есть две функции  - если есть потомок indexOfChild, и если нет  - indexOfTopLevelItem
Для определения индекса элемента для удаления использую следующий код:
Код:
if (ui.treeWidget->currentItem()->parent())
{
index = ui.treeWidget->currentItem()->parent()->indexOfChild(ui.treeWidget->currentItem());
delete ui.treeWidget->currentItem()->parent()->takeChild(index);
}
  else
{
index = ui.treeWidget->indexOfTopLevelItem(ui.treeWidget->currentItem());
delete ui.treeWidget->takeTopLevelItem(index);
}
А как определить абсолютный индекс элемента относительно верхнего элемента  как это делает функция Delphi  - AbsoluteIndex Непонимающий
Записан
lex_newton
Гость
« Ответ #1 : Январь 19, 2009, 15:08 »

Понятия не имею, что такое AbsoluteIndex в Delphi. Но возможно тебе нужно это:  treeWidget->currentIndex().internalId()

Код:
QMessageBox::information(this, QString( "Current Internal Id" ), QString::number( treeWidget->currentIndex().internalId() ) );
Записан
Dendy
Гость
« Ответ #2 : Январь 19, 2009, 15:16 »

internalId() и internalPointer() - это вспомогательные детали реализации модели, использоваться они могут исключительно внутри неё. По теме: а зачем вам этот индект вообще нужен?
Записан
lex_newton
Гость
« Ответ #3 : Январь 19, 2009, 15:22 »

Я всеголишь предположил, что может являться аналогом AbsoluteIndex. (VCL я не знаю)
Записан
алексей
Гость
« Ответ #4 : Январь 19, 2009, 15:54 »

internalId() и internalPointer() - это вспомогательные детали реализации модели, использоваться они могут исключительно внутри неё. По теме: а зачем вам этот индект вообще нужен?

Переделывание проекта с delphi - он используется для привязки в базах....можно конечно и подругому, но придется вообще тогда все менять...
Записан
pastor
Administrator
Джедай : наставник для всех
*****
Offline Offline

Сообщений: 2901



Просмотр профиля WWW
« Ответ #5 : Январь 19, 2009, 16:05 »

...можно конечно и подругому, но придется вообще тогда все менять...

Мой совет - не старайтесь портировать код с Делфи на Qt 1:1. Возмите за основу лишь логику работы отдельно взятых частей программы. Если нет прямых аналогов в Qt - переписывайте этот участок кода с использованием средст Qt.
Записан

Integrated Computer Solutions, Inc. (ICS)
http://www.ics.com/
алексей
Гость
« Ответ #6 : Январь 22, 2009, 14:56 »

Понятия не имею, что такое AbsoluteIndex в Delphi. Но возможно тебе нужно это:  treeWidget->currentIndex().internalId()

Код:
QMessageBox::information(this, QString( "Current Internal Id" ), QString::number( treeWidget->currentIndex().internalId() ) );


По поводу internalId - оказался пока единственный вариант, пусть даже эта функция не возвращает последовательные значения item с верха дерева, но зато дает уникальные значения, к которым и можно привязаться.

Код:
QTreeWidgetItemIterator it (ui.treeWidget);
while (*it)
 {
 ui.treeWidget->setCurrentItem((*it));
 int id =  ui.treeWidget->currentIndex().internalId(); //уникальный номер
 ++it;
 }

Спасибо за подсказку. Не пришлось перелопачивать весь код !
Записан
NordOrK
Гость
« Ответ #7 : Март 12, 2009, 10:58 »

Не самое лучшее решение, т.к. ID меняется.  Грустный
Записан
nn1317
Гость
« Ответ #8 : Март 17, 2009, 01:04 »

действительно кривоватое решение. сталкивался с сабжем, думал просто пройтись циклом фор по всем элементам дерева))
по сути это граф. можно пронумеровать самому, ниче сложного нет - хоть поиском в глубину, хоть в ширину. но имхо лучше все таки поправить логику алгоритма - обычно ищут родителя, а затем перебирают всех его сыновей и тд. а это в qt делается очень легко)
Записан
Страниц: [1]   Вверх
  Печать  
 
Перейти в:  


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