C++ 从QToolBar拖放到QGraphicsView的操作未按预期进行

C++ 从QToolBar拖放到QGraphicsView的操作未按预期进行,c++,qt,drag-and-drop,qgraphicsview,qtoolbar,C++,Qt,Drag And Drop,Qgraphicsview,Qtoolbar,我正在使用qtc++进行一个项目。我有一个QToolBar,其中包含一些QButtons(读作QAction)和QGraphicsView(整个底部)。 看起来像这样 现在,我想将QToolBar中的QButton(读作QAction)拖动到我的应用程序的中央窗口(实际上是QGraphicsView) 到目前为止,我已经为相应的QAction编写了以下SLOT,以启用拖放 /* Send_Message is one of the actions */ void CTestBuilderApp

我正在使用
qtc++
进行一个项目。我有一个
QToolBar
,其中包含一些
QButton
s(读作
QAction
)和
QGraphicsView
(整个底部)。 看起来像这样

现在,我想将
QToolBar
中的
QButton
(读作
QAction
)拖动到我的应用程序的中央窗口(实际上是
QGraphicsView

到目前为止,我已经为相应的
QAction
编写了以下
SLOT
,以启用拖放

/* Send_Message is one of the actions */
void CTestBuilderApp::on_actionSend_Message_triggered()
{    
    QByteArray itemData;    
    QDataStream dataStream(&itemData, QIODevice::WriteOnly);    
    emit selectionState(None); 

    dataStream << "Send Message";    

    QMimeData *mimeData = new QMimeData;    
    mimeData->setData("application/x-dnditemdata", itemData);    

    QDrag *drag = new QDrag(this);    
    drag->setMimeData(mimeData);    
    drag->setPixmap(ui->ToolBox->actions().at->icon().pixmap(48,48));    
    drag->exec(Qt::CopyAction, Qt::CopyAction);    
    qDebug()<<"drag complete";
} 
/*发送消息是其中一项操作*/
void CTestBuilderApp::on_actionSend_Message_triggered()
{    
QByteArray项目数据;
QDataStream数据流(&itemData,QIODevice::WriteOnly);
发射选择状态(无);
数据流setData(“应用程序/x-dnditemdata”,itemData);
QDrag*拖动=新的QDrag(本);
拖动->设置mimeData(mimeData);
拖动->设置pixmap(ui->工具箱->操作().at->图标().pixmap(48,48));
拖动->执行(Qt::CopyAction,Qt::CopyAction);

qDebug()您应该实现QGraphicsView插槽(因此需要将其子类化):

在QGraphicsView构造函数中,您必须接受删除:

setAcceptDrops(true);
在所有插槽中,您必须接受操作以允许流量:

enter -> move -> drop

您应该实现QGraphicsView插槽(因此需要将其子类化):

在QGraphicsView构造函数中,您必须接受删除:

setAcceptDrops(true);
在所有插槽中,您必须接受操作以允许流量:

enter -> move -> drop