当前位置:编程学习 > wap >>

求助qtextedit中 粘贴图片的问题

我想做一个类似qq的聊天输入编辑框 可以把图片粘贴进来
目前Qtextedit可以实现粘贴进来 但是不能显示 原因是资源里没有这个图片
是否需要重载粘贴事件?把图片下载到本地然后加入资源?
求指导 图片 qt 聊天 --------------------编程问答-------------------- QTextEdit支持Html的,可以显示本地图片,有路径就可以。
好久之前写的你看看:
http://blog.sina.com.cn/s/blog_9da24f3b0101jz1w.html

不知道粘贴怎么获取路径 --------------------编程问答--------------------
引用 1 楼 haltwang 的回复:
QTextEdit支持Html的,可以显示本地图片,有路径就可以。
好久之前写的你看看:
http://blog.sina.com.cn/s/blog_9da24f3b0101jz1w.html

不知道粘贴怎么获取路径


明天回公司试试 我这边是linux系统 用的是wineQQ 不能获取到QQ文件夹里的图片 --------------------编程问答--------------------
引用 1 楼 haltwang 的回复:
QTextEdit支持Html的,可以显示本地图片,有路径就可以。
好久之前写的你看看:
http://blog.sina.com.cn/s/blog_9da24f3b0101jz1w.html

不知道粘贴怎么获取路径


我是想把QQ里的聊天记录 存储到MYSQL里 并且能读回程序里显示 --------------------编程问答-------------------- 复制有几种情况,需要看metaData
1. 复制路径:粘贴时直接用src显示
2. 复制bytes: 把图片保存在指定的文件夹(QQ有专门的文件夹),然后再用src显示 --------------------编程问答--------------------
引用 1 楼 haltwang 的回复:
QTextEdit支持Html的,可以显示本地图片,有路径就可以。
好久之前写的你看看:
http://blog.sina.com.cn/s/blog_9da24f3b0101jz1w.html

不知道粘贴怎么获取路径



尝试了一下 还是没有头绪

看了您的文章里面的imgPathToHtml()不知从哪里调用这个转换函数
是从粘贴事件里 遇到图片时调用? --------------------编程问答--------------------
引用 4 楼 Inhibitory 的回复:
复制有几种情况,需要看metaData
1. 复制路径:粘贴时直接用src显示
2. 复制bytes: 把图片保存在指定的文件夹(QQ有专门的文件夹),然后再用src显示


尝试了一段网上的代码
class TextEdit : public QTextEdit 

public: 
    bool canInsertFromMimeData(const QMimeData* source) const 
    { 
        return source->hasImage() || source->hasUrls() || 
            QTextEdit::canInsertFromMimeData(source); 
    } 
 
    void insertFromMimeData(const QMimeData* source) 
    { 
        if (source->hasImage()) 
        { 
            static int i = 1; 
            QUrl url(QString("dropped_image_%1").arg(i++)); 
            dropImage(url, qvariant_cast<QImage>(source->imageData())); 
        } 
        else if (source->hasUrls()) 
        { 
            foreach (QUrl url, source->urls()) 
            { 
                QFileInfo info(url.toLocalFile()); 
                if (QImageReader::supportedImageFormats().contains(info.suffix().toLower().toLatin1())) 
                    dropImage(url, QImage(info.filePath())); 
                else 
                    dropTextFile(url); 
            } 
        } 
        else 
        { 
            QTextEdit::insertFromMimeData(source); 
        } 
    } 
 
private: 
    void dropImage(const QUrl& url, const QImage& image) 
    { 
        if (!image.isNull()) 
        { 
            document()->addResource(QTextDocument::ImageResource, url, image); 
            textCursor().insertImage(url.toString()); 
        } 
    } 
 
    void dropTextFile(const QUrl& url) 
    { 
        QFile file(url.toLocalFile()); 
        if (file.open(QIODevice::ReadOnly | QIODevice::Text)) 
            textCursor().insertText(file.readAll()); 
    } 
}; 


可以实现拖拽图片 然后在Qtextedit里显示
目前拖拽 单图片的复制粘贴 都可以在Qtextedit里显示
但是 图片+文字的复制后 就不能粘贴在Qtextedit里了 --------------------编程问答-------------------- 对哦,复制好想是复制的路径,没有复制文件的。
关键是怎么扑捉粘贴那个事件。
--------------------编程问答--------------------
引用 2 楼 winslx 的回复:
Quote: 引用 1 楼 haltwang 的回复:

QTextEdit支持Html的,可以显示本地图片,有路径就可以。
好久之前写的你看看:
http://blog.sina.com.cn/s/blog_9da24f3b0101jz1w.html

不知道粘贴怎么获取路径


明天回公司试试 我这边是linux系统 用的是wineQQ 不能获取到QQ文件夹里的图片



那个公司,真找工作呢 --------------------编程问答--------------------
引用 8 楼 haltwang 的回复:
Quote: 引用 2 楼 winslx 的回复:

Quote: 引用 1 楼 haltwang 的回复:

QTextEdit支持Html的,可以显示本地图片,有路径就可以。
好久之前写的你看看:
http://blog.sina.com.cn/s/blog_9da24f3b0101jz1w.html

不知道粘贴怎么获取路径


明天回公司试试 我这边是linux系统 用的是wineQQ 不能获取到QQ文件夹里的图片



那个公司,真找工作呢



2000块钱的公司 我只是网管..这个是业余爱好  不过把这个学好了 打算往这方面发展 --------------------编程问答--------------------
引用 6 楼 winslx 的回复:
Quote: 引用 4 楼 Inhibitory 的回复:

复制有几种情况,需要看metaData
1. 复制路径:粘贴时直接用src显示
2. 复制bytes: 把图片保存在指定的文件夹(QQ有专门的文件夹),然后再用src显示


尝试了一段网上的代码
class TextEdit : public QTextEdit 

public: 
    bool canInsertFromMimeData(const QMimeData* source) const 
    { 
        return source->hasImage() || source->hasUrls() || 
            QTextEdit::canInsertFromMimeData(source); 
    } 
 
    void insertFromMimeData(const QMimeData* source) 
    { 
        if (source->hasImage()) 
        { 
            static int i = 1; 
            QUrl url(QString("dropped_image_%1").arg(i++)); 
            dropImage(url, qvariant_cast<QImage>(source->imageData())); 
        } 
        else if (source->hasUrls()) 
        { 
            foreach (QUrl url, source->urls()) 
            { 
                QFileInfo info(url.toLocalFile()); 
                if (QImageReader::supportedImageFormats().contains(info.suffix().toLower().toLatin1())) 
                    dropImage(url, QImage(info.filePath())); 
                else 
                    dropTextFile(url); 
            } 
        } 
        else 
        { 
            QTextEdit::insertFromMimeData(source); 
        } 
    } 
 
private: 
    void dropImage(const QUrl& url, const QImage& image) 
    { 
        if (!image.isNull()) 
        { 
            document()->addResource(QTextDocument::ImageResource, url, image); 
            textCursor().insertImage(url.toString()); 
        } 
    } 
 
    void dropTextFile(const QUrl& url) 
    { 
        QFile file(url.toLocalFile()); 
        if (file.open(QIODevice::ReadOnly | QIODevice::Text)) 
            textCursor().insertText(file.readAll()); 
    } 
}; 


可以实现拖拽图片 然后在Qtextedit里显示
目前拖拽 单图片的复制粘贴 都可以在Qtextedit里显示
但是 图片+文字的复制后 就不能粘贴在Qtextedit里了

一起复制文字和图片也是一样的,主要是看在 MetaData 里怎么保存的,然后对应解析。 --------------------编程问答--------------------
引用 10 楼 Inhibitory 的回复:
Quote: 引用 6 楼 winslx 的回复:

Quote: 引用 4 楼 Inhibitory 的回复:

复制有几种情况,需要看metaData
1. 复制路径:粘贴时直接用src显示
2. 复制bytes: 把图片保存在指定的文件夹(QQ有专门的文件夹),然后再用src显示


尝试了一段网上的代码
class TextEdit : public QTextEdit 

public: 
    bool canInsertFromMimeData(const QMimeData* source) const 
    { 
        return source->hasImage() || source->hasUrls() || 
            QTextEdit::canInsertFromMimeData(source); 
    } 
 
    void insertFromMimeData(const QMimeData* source) 
    { 
        if (source->hasImage()) 
        { 
            static int i = 1; 
            QUrl url(QString("dropped_image_%1").arg(i++)); 
            dropImage(url, qvariant_cast<QImage>(source->imageData())); 
        } 
        else if (source->hasUrls()) 
        { 
            foreach (QUrl url, source->urls()) 
            { 
                QFileInfo info(url.toLocalFile()); 
                if (QImageReader::supportedImageFormats().contains(info.suffix().toLower().toLatin1())) 
                    dropImage(url, QImage(info.filePath())); 
                else 
                    dropTextFile(url); 
            } 
        } 
        else 
        { 
            QTextEdit::insertFromMimeData(source); 
        } 
    } 
 
private: 
    void dropImage(const QUrl& url, const QImage& image) 
    { 
        if (!image.isNull()) 
        { 
            document()->addResource(QTextDocument::ImageResource, url, image); 
            textCursor().insertImage(url.toString()); 
        } 
    } 
 
    void dropTextFile(const QUrl& url) 
    { 
        QFile file(url.toLocalFile()); 
        if (file.open(QIODevice::ReadOnly | QIODevice::Text)) 
            textCursor().insertText(file.readAll()); 
    } 
}; 


可以实现拖拽图片 然后在Qtextedit里显示
目前拖拽 单图片的复制粘贴 都可以在Qtextedit里显示
但是 图片+文字的复制后 就不能粘贴在Qtextedit里了

一起复制文字和图片也是一样的,主要是看在 MetaData 里怎么保存的,然后对应解析。




感谢 研究中 --------------------编程问答--------------------
引用 10 楼 Inhibitory 的回复:
Quote: 引用 6 楼 winslx 的回复:

Quote: 引用 4 楼 Inhibitory 的回复:

复制有几种情况,需要看metaData
1. 复制路径:粘贴时直接用src显示
2. 复制bytes: 把图片保存在指定的文件夹(QQ有专门的文件夹),然后再用src显示


尝试了一段网上的代码
class TextEdit : public QTextEdit 

public: 
    bool canInsertFromMimeData(const QMimeData* source) const 
    { 
        return source->hasImage() || source->hasUrls() || 
            QTextEdit::canInsertFromMimeData(source); 
    } 
 
    void insertFromMimeData(const QMimeData* source) 
    { 
        if (source->hasImage()) 
        { 
            static int i = 1; 
            QUrl url(QString("dropped_image_%1").arg(i++)); 
            dropImage(url, qvariant_cast<QImage>(source->imageData())); 
        } 
        else if (source->hasUrls()) 
        { 
            foreach (QUrl url, source->urls()) 
            { 
                QFileInfo info(url.toLocalFile()); 
                if (QImageReader::supportedImageFormats().contains(info.suffix().toLower().toLatin1())) 
                    dropImage(url, QImage(info.filePath())); 
                else 
                    dropTextFile(url); 
            } 
        } 
        else 
        { 
            QTextEdit::insertFromMimeData(source); 
        } 
    } 
 
private: 
    void dropImage(const QUrl& url, const QImage& image) 
    { 
        if (!image.isNull()) 
        { 
            document()->addResource(QTextDocument::ImageResource, url, image); 
            textCursor().insertImage(url.toString()); 
        } 
    } 
 
    void dropTextFile(const QUrl& url) 
    { 
        QFile file(url.toLocalFile()); 
        if (file.open(QIODevice::ReadOnly | QIODevice::Text)) 
            textCursor().insertText(file.readAll()); 
    } 
}; 


可以实现拖拽图片 然后在Qtextedit里显示
目前拖拽 单图片的复制粘贴 都可以在Qtextedit里显示
但是 图片+文字的复制后 就不能粘贴在Qtextedit里了

一起复制文字和图片也是一样的,主要是看在 MetaData 里怎么保存的,然后对应解析。


哥们 能再指点一下吗?我在网上没找到MetaData的相关资料 不知从何下手 --------------------编程问答-------------------- 哥们 能再指点一下吗?我在网上没找到MetaData的相关资料 不知从何下手
去看Qt的drag and drop方面的内容,里面有讲。 --------------------编程问答--------------------
引用 13 楼 Inhibitory 的回复:
哥们 能再指点一下吗?我在网上没找到MetaData的相关资料 不知从何下手
去看Qt的drag and drop方面的内容,里面有讲。


哥们 真抱歉还是要问你 QMimeData::hasImage()可以判断剪贴板里是否有图片 但是如果剪贴板里又图文 或者两个图片以上 就会返回false

我现在都已经把拖拽功能做出来了 图片也能显示 唯一的问题是剪贴板里有图文 并且多个图片时
如何循环读到qtextedit里 求指教 谢谢 --------------------编程问答-------------------- 研究成功了。我也遇到复制图文的问题了,求指教。万分感谢! --------------------编程问答-------------------- 除
补充:移动开发 ,  Qt
CopyRight © 2012 站长网 编程知识问答 www.zzzyk.com All Rights Reserved
部份技术文章来自网络,