Russian Qt Forum
Ноябрь 29, 2024, 05:53 *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

Войти
 
  Начало   Форум  WIKI (Вики)FAQ Помощь Поиск Войти Регистрация  

Страниц: [1]   Вниз
  Печать  
Автор Тема: реализация "перетаскивания"  (Прочитано 2114 раз)
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 мыши определять сам объект и т.д. ?
Записан
alexis031182
Гость
« Ответ #1 : Апрель 10, 2012, 14:25 »

Не очень понятно, как Вы пишите это:
Код:
void QGraphicsView::dragEnterEvent(QDragEnterEvent *event)
...
void QGraphicsView::dropEvent(QDropEvent *event)
...
По идее, Вам нужен дочерний класс от QGraphicsView, где и будут переопределяться эти функции. А доступ к форме можно получить, например, через parent(), при условии, что форма является родителем дочернего виджета.
Записан
Страниц: [1]   Вверх
  Печать  
 
Перейти в:  


Страница сгенерирована за 0.043 секунд. Запросов: 20.