当前位置:C++技术网 > 资讯 > 如何在QTextEdit中粘贴图片?本文给你思路!

如何在QTextEdit中粘贴图片?本文给你思路!

更新时间:2016-02-10 16:12:33浏览次数:1+次

问题描述:

        在开发自用的小工具:电子书读书笔记.exe 时,突然想把重要的段落截图放进笔记本,但是不知道该怎么做。于是想到了模仿QQ聊天框的办法,但是正常情况下的QTextEdit是无法直接截图然后粘贴进去的。

问题解决办法:

        首先去查查QTextEdit控件关于热键的处理,经过查询才知道QTextEdit支持了很多的热键,包括:

以上为QTextEdit默认支持的,但是对于CTRL+V粘贴图片无法处理(本人Qt5.4 + vs2013),所以只能手工处理图片,经过查询,发现在QTextEdit中,它支持如此格式的图片添加:

于是,思路来了:在执行ctrl+v时把图片数据直接保存为图片文件,然后引用那个图片文件(类似于cache文件)。

代码为:

bool NotePad::eventFilter(QObject *obj, QEvent *event)
{
    if (obj == ui->textEdit)
    {
            if (event->type() == QEvent::KeyPress)
            {
                QKeyEvent *keyEvent = static_cast<QKeyEvent *>(event);

                if (keyEvent->modifiers() == Qt::ControlModifier && keyEvent->key() == Qt::Key_V)
                {
                    QClipboard *board = QApplication::clipboard();
                    if (board->mimeData()->hasImage())
                    {
                        QImage image = board->image();
                        image.save("C:/Windows/Temp/temp.png");
                        ui->textEdit->append("<img src=C:/Windows/Temp/temp.png>");
                    }
                    else
                        return false;//一定返回false!!
                }
                return false;//一定返回false!!  }
            else
            {
                return false;//一定返回false
            }
        }
    else
    {        // pass the event on to the parent class
            return NotePad::eventFilter(obj, event);
    }
}
注意:以上代码在使用时,在构造函数中加上一句话:ui->textEdit->isntallEvenfilter (this);(具体见Qt帮助文件)

效果如下:

(PS:那个带字幕的就是图片)