Qt 4.7.1, Windows 7, MSVC
Есть QTableWidget, примерно вот такой
C++ (Qt)
ui.data->setDragDropMode(QAbstractItemView::DropOnly);
ui.data->installEventFilter(this);
ui.data->setColumnCount(labels.size());
ui.data->setHorizontalHeaderLabels(labels);
ui.data->setRowCount(count);
ui.data->setSelectionBehavior(QAbstractItemView::SelectRows);
И есть функция eventFilter, примерно вот такая:
C++ (Qt)
bool object::eventFilter(QObject* watched, QEvent* event)
{
if (watched == ui.data)
{
// <...>
else if (event->type() == QEvent::Drop)
{
QDropEvent* devent = static_cast<QDropEvent*>(event);
assert(devent);
QTableWidgetItem* selected = ui.data->itemAt(devent->pos()); // ?
ui.data->selectRow(selected->row());
return true;
}
return ui.data->eventFilter(watched, event);
}
return false;
}
Только такое чувство, что itemAt (а если поменять на индексы, то и indexAt) возвращает элемент в координатах, Y которых как будто бы отсчитывается не от верхнего края виджета, а от нижнего края ui.data->horizontalHeaderView().
То есть фактически выделен оказывается элемент ниже того, на который действительно попал курсор. Причем я проверил, меняя высоту header-а, это действительно оказалось так.
Что я делаю не так?
Спасибо заранее.