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

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

Страниц: [1]   Вниз
  Печать  
Автор Тема: QTreeWidget и itemAt  (Прочитано 7186 раз)
qtuser
Гость
« : Март 25, 2009, 22:31 »

Ребят, помогите разобраться с QTreeWidget. Функцией "createItems" создаю три элемента treeWidget-a:

Код:
void MainWindow::createItems()
{
    treeWidget = new QTreeWidget;

    QTreeWidgetItem *firstItem = new QTreeWidgetItem(treeWidget);
    firstItem->setText(0, "first");

    QTreeWidgetItem *secondItem = new QTreeWidgetItem(treeWidget);
    secondItem->setText(0, "second");

    QTreeWidgetItem *thirdItem = new QTreeWidgetItem(treeWidget);
    thirdItem->setText(0, "third");
}

Далее пытаюсь с ними работать функцией "changeText":

Код:
void MainWindow::changeText()
{
    treeWidget->itemAt(0,0)->setText(0, "first change");
    treeWidget->itemAt(0,1)->setText(0, "second change")
    treeWidget->itemAt(0,2)->setText(0, "third change");
}

И возникает такая проблема: 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 - поведение одинаковое
Записан
pastor
Administrator
Джедай : наставник для всех
*****
Offline Offline

Сообщений: 2901



Просмотр профиля WWW
« Ответ #1 : Март 25, 2009, 23:08 »

itemAt на вход принимает координаты (в пикселах), т.е. itemAt(0,0) вернет тебе элемент который расположен в точке (0;0).

Для доступа к элементам дерева используй topLevelItem для элементов верхнего уровня. Для навигации - itemBelow, itemAbove, QTreeWidgetItem::child и т.д.
Записан

Integrated Computer Solutions, Inc. (ICS)
http://www.ics.com/
xintrea
Супер активный житель
*****
Offline Offline

Сообщений: 754



Просмотр профиля WWW
« Ответ #2 : Март 26, 2009, 00:02 »

Мда, лишний раз убеждаюсь, что дока Qt далека от совершенства

Returns a pointer to the item at the coordinates (x, y).

Кто им мешал дописать что координаты эти не координаты ячеек, а координаты в пикселях? Я тоже думал что itemAt(x,y) - это в размерности сетки ячеек. Тоже видел что не работает и списал на баг. Не прошло и пол года, как узнал что сия функция значит на самом деле.
Записан

Собираю информацию по крупицам
http://webhamster.ru
spirit
Гость
« Ответ #3 : Март 26, 2009, 09:23 »

дык из семантики и так понятно x, y коорданаты, если бы было row, collumn, то это "координаты" ячейки.
тут же вроде кто-то задвигал про самодокументированность кода и т.д.  Подмигивающий
Записан
Rcus
Гость
« Ответ #4 : Март 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).
Думаю тут сложно перепутать пикселы и логические координаты Улыбающийся
Записан
spirit
Гость
« Ответ #5 : Март 26, 2009, 09:40 »

Может у нас разные доки?
Цитировать
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).
Думаю тут сложно перепутать пикселы и логические координаты Улыбающийся
+1
Записан
xintrea
Супер активный житель
*****
Offline Offline

Сообщений: 754



Просмотр профиля WWW
« Ответ #6 : Март 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 не быть объекту для хранения произвольного указателя с какой-то еще метаинформацией).

Тут проблема в том, что в документации, как и в любой точной науке, нельзя забывать указывать размерность. Никто о размерности не должен догадываться из контекста.
Записан

Собираю информацию по крупицам
http://webhamster.ru
qtuser
Гость
« Ответ #7 : Март 26, 2009, 20:07 »

Всем спасибо, что помогли разобраться. Теперь все встало на свои места.
Записан
Страниц: [1]   Вверх
  Печать  
 
Перейти в:  


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