将图片发送到系统剪贴板

3
当我尝试将一张图片复制到系统剪贴板中(以便将其粘贴到MS Word文档中)时,下面的代码失败了,不知道为什么,即使我尝试使用settext也失败了,不知道为什么。
QApplication::clipboard()->setPixmap(
        QPixmap("d://20121001154504.png"),
        QClipboard::Clipboard);

啊。无法编辑您的帖子... 请删除开头的4个空格,在代码前加一个空行并在代码前添加4个空格。 - borisbn
好的。但是你没有在代码前添加4个空格。请添加,以便更好地显示。 - borisbn
@Marek R,请告诉我,你是如何绕过“6个非空格字符规则”的?我尝试编辑帖子,但SO告诉我,我不能进行更改,因为我只插入了4个空格。 - borisbn
完成了吗?我尝试去符合格式,但我的英语不太好。 - jude
@borisbn:我不明白你的问题,我只是阅读了如何使用这个网站的帮助,里面有很多很酷的提示。要获得编辑其他用户问题的权限,你需要有更好的分数。 - Marek R
2个回答

4
首先,阅读文档(使用QImage而不是QPixmap)。然后确认图像已正确加载。
QImage image("d://20121001154504.png");
Q_ASSERT(!image.isNull());
QApplication::clipboard()->setImage(image, QClipboard::Clipboard);

我知道setPixmap是可以的,但文档说它会被转换为QImage,因此出于性能考虑最好使用setImage。 - Marek R

1

我尝试了您的代码(当然使用了我的图片路径),结果如下:

当我通过调试器(在MSVC中是Step Over或F10)执行此行时,切换到MS Word并尝试粘贴图像 - 我什么也没有得到。

当我在没有调试器的情况下运行程序时 - 我得到了适当的结果 - 图像被粘贴到文档中。

#include <QtGui/QApplication>
#include <QClipboard>
#include <QPixmap>

int main( int argc, char * argv[] )
{   
    QApplication a( argc, argv );

    QApplication::clipboard()->setPixmap( QPixmap( "path to my png" ) );
    // if you'll stop here in debugger, you'll have no result

    return a.exec();
}

是的,我注意到了,如果让函数运行到结束,结果就是正确的。为什么在调试器中停止,我就没有结果了呢?这是否意味着在这里复制到剪贴板还没有完成?实际上,我想在这里添加一些代码以实现将剪贴板粘贴到 MS Word 文档中,然后我在这里停下来手动粘贴,检查我是否成功地将图像复制到剪贴板中。 - jude
这是不是意味着,这里复制到剪贴板的操作还没有完成?我认为 - 你说得对。该操作被放入消息队列中,稍后会进行处理(在a.exec()中)。尝试在调用setPixmap之后立即调用QApplication::processEvents()函数。 - borisbn

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接