c++ - QT将图像从缩略图拖放到网格布局(QVTKOpenGLWidget)?
问题描述
我想在我的项目中执行拖放功能。我有一个列表小部件作为(缩略图)。而且,我想从缩略图中拖动图像并将图像作为(QVTKOpenGlWidget)拖放到网格布局中。我已经使用了这个代码。但不幸的是,我无法拖放。
代码:
void mainwindow::dragEnterEvent(QDragEnterEvent *e)
{
if (e->mimeData()->hasFormat("application/x-dnditemdata")) {
if (e->source() == this) {
e->setDropAction(Qt::MoveAction);
e->accept();
}
else {
e->acceptProposedAction();
}
}
else {
e->ignore();
}
}
void mainwindow::dragMoveEvent(QDragMoveEvent *event)
{
if (event->mimeData()->hasFormat("application/x-dnditemdata")) {
if (event->source() == this) {
event->setDropAction(Qt::MoveAction);
event->accept();
}
else {
event->acceptProposedAction();
}
}
else {
event->ignore();
}
}
void mainwindow::dropEvent(QDropEvent *e)
{
if (e->mimeData()->hasFormat("application/x-dnditemdata")) {
QByteArray itemData = e->mimeData()->data("application/x-dnditemdata");
QDataStream dataStream(&itemData, QIODevice::ReadOnly);
QPalette pixmap;
QPoint offset;
dataStream >> pixmap >> offset;
this->ui->view1->setPalette(pixmap);
this->ui->view1->move(e->pos() - offset);
this->ui->view1->show();
this->ui->view1->setAttribute(Qt::WA_DeleteOnClose);
if (e->source() == this) {
e->setDropAction(Qt::MoveAction);
e->accept();
}
else {
e->acceptProposedAction();
}
}
else {
e->ignore();
}
}
任何帮助对我来说都非常有用。先感谢您
解决方案
原因
您正在重新实现mainwindow的拖放事件处理程序。然而,四个 OpenGL 小部件位于主窗口的顶部,因此不会为其生成拖放事件。
解决方案
我的解决方案是从QOpenGLWidget继承并重新实现其事件处理程序:
#include "OpenGlWidget.h"
#include <QDragEnterEvent>
OpenGlWidget::OpenGlWidget(QWidget *parent) :
QOpenGLWidget(parent)
{
setAcceptDrops(true);
}
void OpenGlWidget::dragEnterEvent(QDragEnterEvent *event)
{
event->accept();
}
void OpenGlWidget::dropEvent(QDropEvent *event)
{
// do something
}
注意: setAcceptDrops(true);
并且event->accept();
对于允许小部件接受放置事件很重要。
例子
根据您提供的任务描述,我为您做了一个示例。它允许将左侧QListWidget中的图标拖放到右侧网格布局中排列的四个 OpenGL 小部件之一上。拖放的图标随后会显示在相应的 OpenGL 小部件中。
完整代码可在GitHub 上获得。
推荐阅读
- android - 将 RecyclerView 与 FirestoreRecyclerAdapter 一起使用时如何设置滚动位置?
- html - 我如何将我的图标图像放置在行和列中而不必使用表格
- ssl - 如何在 JAX-RS 客户端上以编程方式覆盖密码/协议
- javascript - 修改输入格式后如何提交html表单?
- excel - Excel 定义的名称不会出现在超链接定义的名称中
- python-3.x - “按回车退出”不起作用
- spring - 如何使用双向多对多映射引发以下错误无法添加或更新子行:外键约束失败
- ruby-on-rails - Rails 自定义 group_by
- python - Python/Matplotlib - 表示平均值的颜色条
- c# - Async/Await 在 Windows 窗体应用程序中工作,但它不应该