Цитата(ilyabvt @ 22.7.2013, 20:22)
Цитата
Смотрите, у меня есть сетка из QFrame'ов, их там может быть очень много, и я размещаю виджеты в этой сетке при помощи драг-энд-дропа. Нужно подсвечивать тот QFrame, над которым в данный момент находится перемещаемый виджет.
Элементы сетки одного размера? Если да то можно создать 2-х мерный массив из указателей на QFrame. Разделив и умножив координату на шаг сетки можно получить номер элемента массива. Это если ловить в одном месте типа eventFilter.
Как-то так:
frames[event->x() / step][event->y() / step]->Подсветка();
Если каждый QFrame будет с переопределенным mouseMoveEvent то тогда, по логике, над каким будет курсор тот и будет получать событие.
смотрите, как я делаю.
У виджета, который я перемещаю, есть обработчик mousePressEvent, который посылает сигнал с кооординатами клика внутри этого виджета, а также указатель на себя.
void mousePressEvent(QMouseEvent* event)
{
emit pressed(event->x(),event->y(), this);
}
Этот сигнал ловится классом главного окна. В обработчике я сохраняю указатель и в mouseMoveEvent главного окна перемещаю мой виджет используя сохраненный ранее указатель. Для подсветки требуется получить адрес QFrame'a под указателем. Я делаю это при помощи каста
dynamic_cast<QFrame*>(childAt(event->x(),event->y())
Так вот у меня все работает, если сетка создается ПОСЛЕ создания виджета, который я перемещаю. А если создать сетку ДО этого виджета, то этот каст выдает 0х0. Оно и понятно - ведь под курсором находится не интересующий меня QFrame, а мой виджет, а этот QFrame находится под моим виджетом. И вот как до него добраться я не понимаю.