求助qtextedit中 粘贴图片的问题
我想做一个类似qq的聊天输入编辑框 可以把图片粘贴进来目前Qtextedit可以实现粘贴进来 但是不能显示 原因是资源里没有这个图片
是否需要重载粘贴事件?把图片下载到本地然后加入资源?
求指导 图片 qt 聊天 --------------------编程问答-------------------- QTextEdit支持Html的,可以显示本地图片,有路径就可以。
好久之前写的你看看:
http://blog.sina.com.cn/s/blog_9da24f3b0101jz1w.html
不知道粘贴怎么获取路径 --------------------编程问答--------------------
明天回公司试试 我这边是linux系统 用的是wineQQ 不能获取到QQ文件夹里的图片 --------------------编程问答--------------------
我是想把QQ里的聊天记录 存储到MYSQL里 并且能读回程序里显示 --------------------编程问答-------------------- 复制有几种情况,需要看metaData
1. 复制路径:粘贴时直接用src显示
2. 复制bytes: 把图片保存在指定的文件夹(QQ有专门的文件夹),然后再用src显示 --------------------编程问答--------------------
尝试了一下 还是没有头绪
看了您的文章里面的imgPathToHtml()不知从哪里调用这个转换函数
是从粘贴事件里 遇到图片时调用? --------------------编程问答--------------------
尝试了一段网上的代码
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里了 --------------------编程问答-------------------- 对哦,复制好想是复制的路径,没有复制文件的。
关键是怎么扑捉粘贴那个事件。
--------------------编程问答--------------------
那个公司,真找工作呢 --------------------编程问答--------------------
QTextEdit支持Html的,可以显示本地图片,有路径就可以。
好久之前写的你看看:
http://blog.sina.com.cn/s/blog_9da24f3b0101jz1w.html
不知道粘贴怎么获取路径
明天回公司试试 我这边是linux系统 用的是wineQQ 不能获取到QQ文件夹里的图片
那个公司,真找工作呢
2000块钱的公司 我只是网管..这个是业余爱好 不过把这个学好了 打算往这方面发展 --------------------编程问答--------------------
复制有几种情况,需要看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
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
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方面的内容,里面有讲。 --------------------编程问答--------------------
哥们 能再指点一下吗?我在网上没找到MetaData的相关资料 不知从何下手
去看Qt的drag and drop方面的内容,里面有讲。
哥们 真抱歉还是要问你 QMimeData::hasImage()可以判断剪贴板里是否有图片 但是如果剪贴板里又图文 或者两个图片以上 就会返回false
我现在都已经把拖拽功能做出来了 图片也能显示 唯一的问题是剪贴板里有图文 并且多个图片时
如何循环读到qtextedit里 求指教 谢谢 --------------------编程问答-------------------- 研究成功了。我也遇到复制图文的问题了,求指教。万分感谢! --------------------编程问答-------------------- 除
补充:移动开发 , Qt