2014-09-25 4 views
0

У меня есть QListView в моем MainWindow и включен перетаскивание. Для этого я хотел создать слот-ведьму, слушая события перетаскивания. Но в документации QT я не нашел сигнала для этого события. Как я могу создать слот или как-то перетащить события?QListview Слот для перетаскивания

EDIT: Я просто хочу использовать перетаскивание в ListView, чтобы переупорядочить элементы и просто прослушать это событие.

+0

Проверьте здесь - http://qt-project.org/doc/qt-5/dnd.html –

ответ

1

Для реализации перетаскивания требуется выполнение операции перетаскивания и удаления во всех виджетах, которые будут поддерживать его.

Для реализации операции перетаскивания лучшего подход заключается в использовании перегружать обработчик событий мыши в виджете, который должен иметь возможность перетаскивать:

void DragWidget::mousePressEvent(QMouseEvent *event) 
{ 
    if (event->button() == Qt::LeftButton) 
     dragStartPosition = event->pos(); 
} 

void DragWidget::mouseMoveEvent(QMouseEvent *event) 
{ 
    if (!(event->buttons() & Qt::LeftButton)) 
     return; 
    if ((event->pos() - dragStartPosition).manhattanLength() 
     < QApplication::startDragDistance()) 
     return; 

    QDrag *drag = new QDrag(this); 
    QMimeData *mimeData = new QMimeData; 

    mimeData->setData(mimeType, data); 
    drag->setMimeData(mimeData); 

    Qt::DropAction dropAction = drag->exec(Qt::CopyAction | Qt::MoveAction); 
    ... 
} 

Чтобы иметь возможность получать событие отпускания, это необходимо, чтобы отметить виджет с setAcceptDrops (true) и перегружать функции dragEnterEvent() и dropEvent(). Например:

Window::Window(QWidget *parent) 
    : QWidget(parent) 
{ 
    ... 
    setAcceptDrops(true); 
} 

void Window::dropEvent(QDropEvent *event) 
{ 
    textBrowser->setPlainText(event->mimeData()->text()); 
    mimeTypeCombo->clear(); 
    mimeTypeCombo->addItems(event->mimeData()->formats()); 

    event->acceptProposedAction(); 
} 

Вы можете найти полную документацию для этой here.

 Смежные вопросы

  • Нет связанных вопросов^_^