在Qt

时间:2016-03-30 18:34:14

标签: qt

我希望能够获取QImage并将其放入编辑程序,例如Paint。我已尝试使用以下代码将mime数据设置为当前图像,但数据无法正确移动。 pixmap正确显示,但不会发生丢弃。如果有人有任何建议,那将非常感谢!谢谢!

void LCDWidget::mousePressEvent(QMouseEvent *e) {
    if (e->button() == Qt::LeftButton) {
        QDrag *drag = new QDrag(this);
        QMimeData *mimeData = new QMimeData;
        QImage image = renderFramebuffer(lcdState);
        QPixmap mymap = QPixmap::fromImage(image);

        mimeData->setImageData(image);
        drag->setMimeData(mimeData);
        drag->setHotSpot(e->pos());
        drag->setPixmap(mymap);

        drag->exec(Qt::CopyAction | Qt::MoveAction);
        e->accept();
    } else {
        e->ignore();
    }
}

1 个答案:

答案 0 :(得分:0)

我最终通过以下代码解决了这个问题。解决方案是将图像复制到本地文件,然后使用文件的路径作为复制数据。

void LCDWidget::mousePressEvent(QMouseEvent *e) {
    if (e->button() == Qt::LeftButton) {
        QDrag *drag = new QDrag(this);
        QMimeData *mimeData = new QMimeData;
        QImage image = getImage();
        QPixmap mymap = QPixmap::fromImage(image);

        QString path = QDir::tempPath() + randomString(5) + QStringLiteral(".png");
        image.save(path, "PNG", 0);

        mimeData->setImageData(image);
        mimeData->setUrls(QList<QUrl>() << QUrl::fromLocalFile(path));
        drag->setMimeData(mimeData);
        drag->setHotSpot(e->pos());
        drag->setPixmap(mymap);
        drag->exec(Qt::CopyAction | Qt::MoveAction);
        e->accept();
    } else {
        e->ignore();
    }
}