Название: QTreeWidget и itemAt Отправлено: qtuser от Марта 25, 2009, 22:31 Ребят, помогите разобраться с QTreeWidget. Функцией "createItems" создаю три элемента treeWidget-a:
Код: void MainWindow::createItems() Далее пытаюсь с ними работать функцией "changeText": Код: void MainWindow::changeText() И возникает такая проблема: itemAt(x,y) всегда возвращает первый элемент дерева независимо от значений X и Y, т.е. сначала первому элементу присвоится значение "first change", потом "second change" и наконец "third change", все изменения будут происходить только с первым элементом. Как работать с остальными элементами? Пока придумал костыль вида, который работает: Код: treeWidget->itemBelow(treeWidget->itemAt(0,0))->setText("second change"); Этот код поменяет текст во втором элементе, аналогично для третьего элемента. Но хотелось бы разобраться с itemAt. Qt 4.5.0, Linux/Windows - поведение одинаковое Название: Re: QTreeWidget и itemAt Отправлено: pastor от Марта 25, 2009, 23:08 itemAt на вход принимает координаты (в пикселах), т.е. itemAt(0,0) вернет тебе элемент который расположен в точке (0;0).
Для доступа к элементам дерева используй topLevelItem для элементов верхнего уровня. Для навигации - itemBelow, itemAbove, QTreeWidgetItem::child и т.д. Название: Re: QTreeWidget и itemAt Отправлено: xintrea от Марта 26, 2009, 00:02 Мда, лишний раз убеждаюсь, что дока Qt далека от совершенства
Returns a pointer to the item at the coordinates (x, y). Кто им мешал дописать что координаты эти не координаты ячеек, а координаты в пикселях? Я тоже думал что itemAt(x,y) - это в размерности сетки ячеек. Тоже видел что не работает и списал на баг. Не прошло и пол года, как узнал что сия функция значит на самом деле. Название: Re: QTreeWidget и itemAt Отправлено: spirit от Марта 26, 2009, 09:23 дык из семантики и так понятно x, y коорданаты, если бы было row, collumn, то это "координаты" ячейки.
тут же вроде кто-то задвигал про самодокументированность кода и т.д. ;) Название: Re: QTreeWidget и itemAt Отправлено: Rcus от Марта 26, 2009, 09:39 Может у нас разные доки?
Цитировать QTreeWidgetItem * QTreeWidget::itemAt ( const QPoint & p ) const Думаю тут сложно перепутать пикселы и логические координаты :)Returns a pointer to the item at the coordinates p. See also visualItemRect(). QTreeWidgetItem * QTreeWidget::itemAt ( int x, int y ) const This is an overloaded member function, provided for convenience. Returns a pointer to the item at the coordinates (x, y). Название: Re: QTreeWidget и itemAt Отправлено: spirit от Марта 26, 2009, 09:40 Может у нас разные доки? +1Цитировать QTreeWidgetItem * QTreeWidget::itemAt ( const QPoint & p ) const Думаю тут сложно перепутать пикселы и логические координаты :)Returns a pointer to the item at the coordinates p. See also visualItemRect(). QTreeWidgetItem * QTreeWidget::itemAt ( int x, int y ) const This is an overloaded member function, provided for convenience. Returns a pointer to the item at the coordinates (x, y). Название: Re: QTreeWidget и itemAt Отправлено: xintrea от Марта 26, 2009, 16:20 Может у нас разные доки? Цитировать QTreeWidgetItem * QTreeWidget::itemAt ( const QPoint & p ) const Думаю тут сложно перепутать пикселы и логические координаты :)Returns a pointer to the item at the coordinates p. See also visualItemRect(). QTreeWidgetItem * QTreeWidget::itemAt ( int x, int y ) const This is an overloaded member function, provided for convenience. Returns a pointer to the item at the coordinates (x, y). Если ниразу не работать с графикой напрямую, и не знать точно что есть QPoint, то лехко. (Почему бы QPoint не быть объекту для хранения произвольного указателя с какой-то еще метаинформацией). Тут проблема в том, что в документации, как и в любой точной науке, нельзя забывать указывать размерность. Никто о размерности не должен догадываться из контекста. Название: Re: QTreeWidget и itemAt Отправлено: qtuser от Марта 26, 2009, 20:07 Всем спасибо, что помогли разобраться. Теперь все встало на свои места.
|