I am working on a project using Qt C++
. I have a QToolBar
which contains some QButton
s (read as QAction
) and a QGraphicsView
(the whole bottom part).
It looks like this.
Now, I want to drag a QButton
(read as QAction
) from the QToolBar
into central window (which actually is QGraphicsView
) of my application.
Till now I have written the following SLOT
for corresponding QAction
to enable dragging and dropping.
/* 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";
}
But, as this SLOT
is being called only when I am click
ing on the QAction
, I am not getting the proper effect of Drag and Drop. When I am clicking the button, only then the dragging is starting. One click on the QAction
and then another click on QGraphicsView
is doing the job, but it's not what it's supposed to be for drag & drop. It's not starting on pressing and then dragging.
Is there any way out to make this code work? I am searching for some SLOT
that get called as soon as I press on the QAction
i.e. it does not wait for Mouse Release to work.