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来设置