【问题标题】:Qt drop a file | mac osQt 拖放文件 |苹果系统
【发布时间】:2013-11-21 14:28:06
【问题描述】:

我进行了很多搜索(引导我到 thisthat)并在我的课程中添加了几行

MainWindow.cpp

#include <QtGui/QDragEnterEvent>
#include <QtGui/QDragLeaveEvent>
#include <QtGui/QDragMoveEvent>
#include <QtGui/QDropEvent>
#include <QtCore/QMimeData>


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

void MainWindow::dragEnterEvent(QDragEnterEvent *event)
{
    event->acceptProposedAction();
}

void MainWindow::dropEvent(QDropEvent *event)
{
    qDebug() << "On Drop Event";
    const QMimeData* mimeData = event->mimeData();

    if (mimeData->hasUrls())
    {
        QStringList pathList;
        QList<QUrl> urlList = mimeData->urls();

        for (int i = 0; i < urlList.size() && i < 32; ++i)
        {
            pathList.append(urlList.at(i).toLocalFile());
        }

        if(openFiles(pathList))
            event->acceptProposedAction();
    }
}
void MainWindow::dragMoveEvent(QDragMoveEvent * event)
{
event->acceptProposedAction();
}
void MainWindow::dragLeaveEvent(QDragLeaveEvent* event)
{
    event->accept();
}

但我无法将文件拖放到我的 MainWindow(从 finder 中)。并不是我的代码崩溃或无法编译,只是我确实不能MainWindow 没有反应,没有亮点,什么都没有。

我错过了什么?

【问题讨论】:

标签: c++ qt drag-and-drop qmainwindow qtgui


【解决方案1】:

我怀疑你也应该重载dragMoveEvent:-

void QWidget::dragMoveEvent(QDragMoveEvent * event)

如文档所述:-

如果正在进行拖动,并且发生以下任何情况时,将调用此事件处理程序:光标进入此小部件,光标在此小部件内移动,或在此小部件已按下键盘上的修饰键时焦点。事件在 event 参数中传递。

有一个 Qt 拖放示例here。特别是this 是一个很好的参考。

【讨论】:

  • 什么不起作用?您刚刚添加了 dragMoveEvent 吗?您是否也接受对活动提出的行动?
  • 我接受建议的操作,但我仍然无法在主窗口中放置文件
  • 您在 enter 和 move 事件中都接受建议的操作吗?你能改变你的问题来代表你现在所拥有的吗?
  • 你还需要添加dragLeave事件。
  • 已添加,仍然无法删除文件
猜你喜欢
  • 1970-01-01
  • 2011-08-16
  • 1970-01-01
  • 2020-07-29
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多