Russian Qt Forum

Qt => Пользовательский интерфейс (GUI) => Тема начата: bez_glaz от Апрель 10, 2012, 13:18



Название: реализация "перетаскивания"
Отправлено: bez_glaz от Апрель 10, 2012, 13:18
Ещё раз добрый день )
Решил реализовать механизм перетаскивания по примеру.
Код:
void MainWindow::dragEnterEvent(QDragEnterEvent *event)
{
    if (event->mimeData()->hasUrls())
        event->accept();
}
void MainWindow::dropEvent(QDropEvent *event)
{
    if (event->mimeData()->hasUrls()) {
        QPixmap pm;
        QString fn = event->mimeData()->urls().at(0).toLocalFile();
        if (pm.load(fn)) {
            ui->label->setPixmap(pm);
            setWindowTitle(trUtf8("Image Viewer - ") + fn);
        }
        event->accept();
    }
}
Но вот проблемка - я хочу переопределить - чтоб не вся моя форма была "приёмником" перетаскивания, а только QGraphicsView. Если я прописываю
Код:
void QGraphicsView::dragEnterEvent(QDragEnterEvent *event)
{
     ....
}
void QGraphicsView::dropEvent(QDropEvent *event)
{
     ....
}
то не могу внутри этих функциях обратиться к элементам моей формы, т.к. protected данные функции.
И ещё второй кастыль. На форме 2 элемента QGraphicsView можно ли указать какой именно меня интересует их этих двух виджетов ? Или придётся подключать доп.силы, типа по eventy мыши определять сам объект и т.д. ?


Название: Re: реализация "перетаскивания"
Отправлено: alexis031182 от Апрель 10, 2012, 14:25
Не очень понятно, как Вы пишите это:
Код:
void QGraphicsView::dragEnterEvent(QDragEnterEvent *event)
...
void QGraphicsView::dropEvent(QDropEvent *event)
...
По идее, Вам нужен дочерний класс от QGraphicsView, где и будут переопределяться эти функции. А доступ к форме можно получить, например, через parent(), при условии, что форма является родителем дочернего виджета.