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

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

Страниц: [1]   Вниз
  Печать  
Автор Тема: indexAt в QtreeWidget  (Прочитано 4526 раз)
hadey
Гость
« : Март 05, 2012, 15:41 »

Добрый день.
Может кто сталкивался: indexAt в QtreeWidget возвращает QModelIndex(-1,-1,0x0,QObject(0x0) ). С чем это может быть связано?
Записан
Bepec
Гость
« Ответ #1 : Март 05, 2012, 15:44 »

Эм... Нет запрашиваемого элемента? утечка памяти? затирка указателями?
Записан
GreatSnake
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 2921



Просмотр профиля
« Ответ #2 : Март 05, 2012, 15:44 »

С чем это может быть связано?
С тем, что QTreeView ничего не нашел по заданной координате.
Показывай код.
Записан

Qt 5.11/4.8.7 (X11/Win)
hadey
Гость
« Ответ #3 : Март 05, 2012, 15:46 »

ui->treeWidget->setSelectionMode(QAbstractItemView::SingleSelection);
    ui->treeWidget->setDragEnabled(true);
    ui->treeWidget->viewport()->setAcceptDrops(true);
    ui->treeWidget->setDropIndicatorShown(true);
    ui->treeWidget->viewport()->installEventFilter(this);

    QTreeWidgetItem *lParentItem;
    while (lQuery.next())
    {
        lParentItem = new QTreeWidgetItem(ui->treeWidget);
        ui->treeWidget->addTopLevelItem(lParentItem);
        //наименование
        lParentItem->setText(0, lQuery.value(0).toString());
        //идентификатор
        lParentItem->setText(1, lQuery.value(1).toString());
        lParentItem->setText(4, "0");
    }
Записан
GreatSnake
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 2921



Просмотр профиля
« Ответ #4 : Март 05, 2012, 15:50 »

2 hadey:
в упор не вижу вызова indexAt().
Записан

Qt 5.11/4.8.7 (X11/Win)
hadey
Гость
« Ответ #5 : Март 05, 2012, 15:50 »

bool MainWindow::eventFilter(QObject *aObject, QEvent *aEvent)
{
    if (aObject == ui->treeWidget->viewport() && (aEvent->type() == QEvent::DragMove))
    {
       qDebug() << ui->treeWidget->indexAt(QCursor::pos());
    }
    return false;
}
Записан
GreatSnake
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 2921



Просмотр профиля
« Ответ #6 : Март 05, 2012, 15:54 »

bool MainWindow::eventFilter(QObject *aObject, QEvent *aEvent)
{
    if (aObject == ui->treeWidget->viewport() && (aEvent->type() == QEvent::DragMove))
    {
       qDebug() << ui->treeWidget->indexAt(QCursor::pos());
    }
    return false;
}
Ну дык правильно, посылаешь в виджет левые координаты и удивляешься.
Используй правильные координаты:
Код
C++ (Qt)
static_cast< QDragMoveEvent* >( aEvent )->pos()
Записан

Qt 5.11/4.8.7 (X11/Win)
hadey
Гость
« Ответ #7 : Март 05, 2012, 15:58 »

ok, спасибо огромное.
Записан
GreatSnake
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 2921



Просмотр профиля
« Ответ #8 : Март 05, 2012, 16:05 »

На всякий случай - у виджета координаты считаются относительно родительского виджета. QCursor::pos() возвращает позицию мыши на текущем экране, т.е. её нужно было преобразовать так:
Код
C++ (Qt)
treeWidget->viewport()->mapFromGlobal( QCursor::pos() )
Записан

Qt 5.11/4.8.7 (X11/Win)
hadey
Гость
« Ответ #9 : Март 05, 2012, 16:13 »

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


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