У меня есть QTableView, где появляется небольшая отметка, если курсор мыши находится на активной ячейке. Эта метка является виджетом и издает сигнал при наведении курсора, изменяя режим выбора таблицы, когда я перетаскиваю ее по таблице.
Проблема в том, что, если я переступил черту, я не могу перетаскивать стол.
Вещи, которые я пробовал:
- Установите метку виджета как
setWindowFlags(Qt::WindowTransparentForInput);
, но я не могу использовать ее, потому что мне нужно событие при наведении.
Игнорировать события в метке виджета с помощью event->ignore()
или отправлять событие родителю с помощью и eventFilter:
bool EventFilterMarca::eventFilter(QObject *obj, QEvent *event)
{
if( event->type() == QEvent::HoverMove)
{
....
}
else if (event->type() == QEvent::MouseButtonPress ||
event->type() == QEvent::MouseButtonRelease ||
event->type() == QEvent::MouseMove ||
event->type() == QEvent::MouseButtonDblClick)
{
//QApplication::sendEvent(parent(),event);//one try
//event->ignore();//another try
return QObject::eventFilter(obj,event);;
}
}
Подклассы mousePressEvent
, mouseReleaseEvent
и mouseMoveEvent
в виджете меток и вызов родительского класса. Похоже, если это работает (передать событие родительскому элементу) в текущую ячейку таблицы (родительский элемент):
void Marca::mousePressEvent(QMouseEvent *event)
{
//event->setAccepted(false);
if(event->buttons() == Qt::LeftButton)
{
MiTabla* tabla = qobject_cast<MiTabla*>(parent());
if (tabla)
{
tabla->mousePressEvent(event);
//QApplication::sendEvent(parent(),event);
}
}
//event->ignore();
}
Ну, вопрос в том, как сделать так, чтобы поведение таблицы было таким же, если я нахожусь над виджетом ячейки или прямо на ячейке.
Также я добавляю ссылку с моим первым подходом к ее получению. Это работает, но код ужасен, и за ним нелегко следовать:
https://github.com/exodehm/tablacalc