Я использую Qt 4.2.
У меня QMainWindow с QListView внутри, который использует QStandardItemModel для отображения некоторых элементов, которые я получаю из файлов .desktop.
Теперь я пытаюсь реализовать действие перетаскивания в приложении, например: я могу запустить firefox, когда файл .html перетаскивается поверх элемента firefox.
Вот что я сделал:
-для listView:
viewport()->setAcceptDrops(true);
setAcceptDrops(true);
setDragEnabled(true);
setDropIndicatorShown(true);
setDragDropMode(QListView::DragDrop);
-для стандартной моделиItemModel:
Qt::DropActions supportedDropActions() const {
return Qt::CopyAction | Qt::MoveAction;
}
Qt::ItemFlags flags(const QModelIndex &index) const {
return Qt::ItemIsSelectable | Qt::ItemIsDragEnabled |
Qt::ItemIsDropEnabled | Qt::ItemIsEnabled;
}
QStringList mimeTypes() const {
QStringList types;
types<<"text/uri-list";
return types;
}
bool dropMimeData(const QMimeData *data, Qt::DropAction action,
int row, int column, const QModelIndex &parent) {
qDebug() << "dropMimeData";
}
После этого я никогда не получаю сообщение об отладке dropMimeData, когда перетаскиваю какой-либо файл в приложение.
1 ответ
Вам также необходимо переопределить dragEnterEvent()
и dropEvent()
- это виртуальные функции в QListView
.
Из документации:
Падение
Чтобы иметь возможность получать медиа, сброшенные на виджет, вызовите setAcceptDrops (true) для виджета и повторно реализуйте функции обработчика событий dragEnterEvent () и dropEvent ().
Например, следующий код включает события перетаскивания в конструкторе подкласса QWidget, что позволяет с пользой реализовать обработчики событий перетаскивания:
void Window::dragEnterEvent(QDragEnterEvent *event)
{
if (event->mimeData()->hasFormat("text/plain"))
event->acceptProposedAction();
}
void Window::dropEvent(QDropEvent *event)
{
textBrowser->setPlainText(event->mimeData()->text());
mimeTypeCombo->clear();
mimeTypeCombo->addItems(event->mimeData()->formats());
event->acceptProposedAction();
}
Похожие вопросы
Новые вопросы
qt
Qt - это кроссплатформенная среда разработки приложений, широко используемая для разработки прикладного программного обеспечения, которая может работать на различных программных и аппаратных платформах с минимальными изменениями в базовом коде или без таковых, при этом обладая мощью и скоростью собственных приложений. Qt доступен как с коммерческими, так и с открытыми лицензиями.