Qt:Pass参数中的拖放问题接收dropEvent

时间:2013-01-06 16:28:06

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

healthPackButton上放置了mysquare。现在我想为这个按钮添加一个值(因为我有一些healthPackButtons,我希望能够区分它们)。我尝试更改makeDrag函数,使其接受一个额外的参数,但我的SIGNAL不再匹配。

问题:如何将其他信息(=> int值)传递给另一个类中的dropEvent处理程序。

Dialog上课

    for (int i=0; i<healthPks.size(); i++){
        int value = healthPks.at(i);
        QPushButton *healthPackButton = new QPushButton(title,this);
        connect(healthPackButton,SIGNAL(pressed()),this,SLOT(makeDrag()));
    }



    void Dialog::makeDrag(){
        QDrag *drag = new QDrag(this);
        QMimeData *mime = new QMimeData;
        mime->setText("This is a test");
        drag->setMimeData(mime);
        drag->start();
    }

mysquare上课

void MySquare::dropEvent(QGraphicsSceneDragDropEvent *event){
    isHealthPack=true;
    int xCoord = curX/width;
    int yCoord = curY/height;
    int value = 0; //what's the value??
    const QMimeData *mimeData = event->mimeData();
    emit healthMapChanged(xCoord,yCoord,value);
    update();
}

1 个答案:

答案 0 :(得分:1)

要在插槽中添加其他参数,您可以使用QSignalMapper - 文档中有一个添加QString const&参数的示例,但您可以使用int将值传递给makeDrag(int)的方法相同。

然后,您可以使用QMimeType的{​​{3}}(例如,使用setDataint转换为QByteArray)以获取该值目标