Russian Qt Forum

Qt => Пользовательский интерфейс (GUI) => Тема начата: алексей от Январь 19, 2009, 14:44



Название: абсолютный индекс элемента QtreeWidget
Отправлено: алексей от Январь 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 ???


Название: Re: абсолютный индекс элемента QtreeWidget
Отправлено: lex_newton от Январь 19, 2009, 15:08
Понятия не имею, что такое AbsoluteIndex в Delphi. Но возможно тебе нужно это:  treeWidget->currentIndex().internalId()

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


Название: Re: абсолютный индекс элемента QtreeWidget
Отправлено: Dendy от Январь 19, 2009, 15:16
internalId() и internalPointer() - это вспомогательные детали реализации модели, использоваться они могут исключительно внутри неё. По теме: а зачем вам этот индект вообще нужен?


Название: Re: абсолютный индекс элемента QtreeWidget
Отправлено: lex_newton от Январь 19, 2009, 15:22
Я всеголишь предположил, что может являться аналогом AbsoluteIndex. (VCL я не знаю)


Название: Re: абсолютный индекс элемента QtreeWidget
Отправлено: алексей от Январь 19, 2009, 15:54
internalId() и internalPointer() - это вспомогательные детали реализации модели, использоваться они могут исключительно внутри неё. По теме: а зачем вам этот индект вообще нужен?

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


Название: Re: абсолютный индекс элемента QtreeWidget
Отправлено: pastor от Январь 19, 2009, 16:05
...можно конечно и подругому, но придется вообще тогда все менять...

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


Название: Re: абсолютный индекс элемента QtreeWidget
Отправлено: алексей от Январь 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;
 }

Спасибо за подсказку. Не пришлось перелопачивать весь код !


Название: Re: абсолютный индекс элемента QtreeWidget
Отправлено: NordOrK от Март 12, 2009, 10:58
Не самое лучшее решение, т.к. ID меняется.  :(


Название: Re: абсолютный индекс элемента QtreeWidget
Отправлено: nn1317 от Март 17, 2009, 01:04
действительно кривоватое решение. сталкивался с сабжем, думал просто пройтись циклом фор по всем элементам дерева))
по сути это граф. можно пронумеровать самому, ниче сложного нет - хоть поиском в глубину, хоть в ширину. но имхо лучше все таки поправить логику алгоритма - обычно ищут родителя, а затем перебирают всех его сыновей и тд. а это в qt делается очень легко)