QTextEdit实现图片和文本同行显示

1.开发环境:Qt 4.7.3 + MinGW 32bit (MSVC2015 32bit)

2.实现大纲:

        1)实现图片和文本在同一行显示,且能够设置字体大小和颜色

        2)能够手动设置行的宽度和间距

        3)设置字体样式,然后添加图片,字体样式重置成默认状态

3.具体实现:

        1)QTextEdit支持文本和图片显示,通过将图片转化为html字符串的形式,然后调用append函数将图片添加到QEditText中即即可,具体实现API如下:

        void changeImagePathToHtml(QString &path) {

                path = QString("<image src = \"%1\"/>").arg(path);

        }

        2)一般来说,文档都需要设置每一行的宽度和间距,QTextEdit中通过QTextCusor和QTextBlockFormat来设置实现,具体实现API如下:

        void setFixedLineHeight(int height) {

                QTextCusor textCusor = m_logInfoTextEdit->textCusor();   //m_logInfoTextEdit为自己新建的QTextEdit

                QTextCusorFormat textBlockFormat;

                textBlockFormat->setLineEdit(height, QTextBlockFormat::FixedHeight);

                textCusor.setBlockFormat(textBlockFormat);

                m_logInfoTextEdit->setTextCusor(textCusor);

        }

        void setFixedLineSpacing(int space) {

                QTextCusor textCusor = m_logInfoTextEdit->textCusor();   //m_logInfoTextEdit为自己新建的QTextEdit

                QTextCusorFormat textBlockFormat;

                textBlockFormat->setBottomMargin(space);

                textCusor.setBlockFormat(textBlockFormat);

                m_logInfoTextEdit->setTextCusor(textCusor);

        }

        3)设置字体颜色和只读换行属

                1)由于我需要实现的log工作区的实现,因此需要设置QTextEdit只读属性,调用setReadOnly(true)即可

                2)由于设置的格式是图片+文本的形式,因此将行打包模式设置成不打包(系统不会自动添加换行符),调用setLineWrapMode(QTextEdit::NoWrap);

                3)设置颜色采用QPalette来实现,具体实现如下:

                     QPalette p = palette();   p.setColor(QPalette::Text, QColor(0, 255, 0); 

                     m_logInfoTextEdit->setPalette(p); //m_logInfoTextEdit同上

        4)  将上述实现封装成API,方便调用:

                void addLogInformation(int logRank, QString logInfo) {

                       m_logInfoTextEdit->moveCursor(QTextCusro::End, QTextCusor::MoveAnchor); //鼠标一直文档末尾

                       QString imagePath;

                       switch(logRank) {

                               case 1:

                                        imagePath = QString(":resource/icons/error.svg");  //图片大小无法自适应(没找到设置方法)

                                        break;                                                                         //因此设置图片大小成每行的间距

                               case 2:                                                                                //如果有博主知道如何修改,请在下面留言

                                       imagePath = QString(":resource/icons/warning.svg);

                                        break;

                               default:

                                        imagePath = QString(":resource/icons/info.svg);

                                        break;

                       }

                       changeImagePathToHtml(imagePath);

                       m_logInfoTextEdit->append(imagePath);

                       m_logInfoTextEdit->setFontPointSize(20);   //在添加完图片之后,字体大小设置重置,需要重新设置

                       QDateTime *dateTime = new QDateTime(QDateTime::currentDateTime());

                       QString str = dateTime->toString(" [yyyy-mm-dd hh:mm:ss]");

                       str += " " + logInfo;

                       m_logInfoTextEdit->insertPlainText(str);

               }

4. 具体实现效果:

5.延伸:实现编译器的问题编译问题列表样式(可以考虑使用QListWidget添加Item来具体实现)

             这里的图片自适应大小,通过setIcon来设置

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值