Коллеги, помогите, пожалуста, по вопросам, связанным с drag&drop.
Перетаскиваю файлы из проводника на один из виджетов главной формы программы. Форма сконструирована в дизайнере. Приемником файлов сделал главную форму (т.к. не знаю, как ответить на 1-й вопрос ниже):
MainWindow::MainWindow(QWidget *parent) :
QMainWindow(parent)
{
setupUi(this);
setAcceptDrops(true);
}
Обработчики drag стандартные:
void MainWindow::dragEnterEvent(QDragEnterEvent * event){
if (event->mimeData()->hasUrls())
event->acceptProposedAction();
else
event->ignore();
}
Разрешаю перетаскивание для ограниченной области (одного из виджетов tabWidget):
void MainWindow::dragMoveEvent(QDragMoveEvent * event){
bool inside=event->answerRect().intersects(tabWidget->geometry());
if (event->mimeData()->hasUrls() && inside)
event->acceptProposedAction();
else
event->ignore();
}
Вопросы следующие:
1) Можно ли перегрузить обработчики dragEnterEvent, dragMoveEvent, dropEvent для виджетов, сделанных в дизайнере, т.е. не создавая производного класса виджета?
2) В обработчике dragMoveEvent координаты курсора >answerRect(), как я понял, даются в системе координат принимающего виджета, а для главной формы отсчет по оси "y" начинается от верхнего края (т.е. от нижнего края заголовка формы).
Координаты дочерних виджетов geometry() даются в системе координат centralWidget(), отличающиеся по оси "y" на высоту панели инструментов. Как лучше привести их к общей системе?