Qt拖放:启用复制时无法移动(Ubuntu Gnome)

Sco*_*ott 5 c++ ubuntu qt drag-and-drop gnome

我正在实现一个视图和一个模型,我希望在内部(通过拖动)支持两个移动项目,并复制项目(通过在拖动时按Ctrl键).我按照说明做了我需要做的一切.我已经设置了mime函数,我已经实现了removeRows()和flags().问题是当我拖动时,它默认为复制操作(我得到带有加号的箭头光标,它确实通过在模型中创建一个新项目来复制项目).

我能看到的唯一区别是:如果我只在supportedDropActions()中返回Qt :: MoveAction,它只会移动.如果我返回(Qt :: CopyAction | Qt :: MoveAction),它只会复制.

有任何想法吗?我希望它像Nautilus(Gnome)或Windows文件资源管理器中的文件一样工作:拖动移动图标,按住Ctrl键并拖动它们.

Vin*_*aul 0

如果你尝试这种方式,首先编写一个 keyPressEvent 并设置是否按下 ctrl 键'

keyPressEvent(QKeyEvent *e)
    {
        if(e->key() == Qt::Key_Control)
            bControlKeyPressed = true;
    }
    keyReleaseEvent (QKeyEvent *e)
    {
       if(e->key() == Qt::Key_Control)
          bControlKeyPressed = false;
    }
Run Code Online (Sandbox Code Playgroud)

并在鼠标 pressEvent 中检查 ctrl 键是否被按下

`mousePressEvent()
{ 
  if (bControlKeyPressed) 
    //enable Qt::CopyAction 
else 
    //enable  Qt::MoveAction 
}` 
Run Code Online (Sandbox Code Playgroud)