我想在 QTextDocument 中的文本周围有一个唯一的左边框
我认为所需的 CSS 是
<div style='
border-left: 6px solid red;
background-color: lightgrey;
'> Hello World </div>
但可以说我有这个 qt 代码
#include <QApplication>
#include <QWidget>
#include <QHBoxLayout>
#include <QTextEdit>
int main(int argc, char *argv[]) {
QApplication a(argc, argv);
QWidget *widget = new QWidget();
auto l = new QHBoxLayout(widget);
widget->setLayout(l);
QTextEdit *e = new QTextEdit(widget), *t = new QTextEdit(widget);
l->addWidget(e);
l->addWidget(t);
QObject::connect(e, &QTextEdit::textChanged, [=]() {
t->setHtml(e->toPlainText());
});
widget->show();
}
现在如果输入 html 我得到这个输出
我想要上面的输出,我缺少什么吗?
不幸的是,
QTextDocument
中的Qt富文本不支持除表格之外的任何内容的边框。即便如此,所有边界都是同时存在的,而不是单独的边。 https://doc.qt.io/qt-5/richtext-html-subset.html#css-properties
更新:嗯,这让我想起了 1996 年为 MSIE 编写 HTML,但是嘿(几乎)总是有办法...(这里唯一的 CSS 实际上是可选的,“所需输出”图像没有填充:)。
<!-- with width=100% the table extends all the way to the right margin -->
<table cellspacing=0 width='100%'>
<tr>
<td width=6 bgcolor='red'/>
<td bgcolor='lightgrey'
style='padding: 0 4px;'
>Hello World</td>
</tr>
</table>
例如,
.h
#ifndef LEFTBORDERTEXTEDIT_H
#define LEFTBORDERTEXTEDIT_H
#include <QTextEdit>
class LeftBorderTextEdit : public QTextEdit
{
Q_OBJECT
public:
LeftBorderTextEdit();
void paintEvent(QPaintEvent* e);
};
#endif // LEFTBORDERTEXTEDIT_H
.cpp
#include "LeftBorderTextEdit.h"
#include "qpainter.h"
#include <QTextBlock>
#include <QAbstractTextDocumentLayout>
LeftBorderTextEdit::LeftBorderTextEdit()
{
}
void LeftBorderTextEdit::paintEvent(QPaintEvent* e)
{
QPainter p = QPainter(viewport());
QPen pen = p.pen();
QBrush brush = p.brush();
pen.setBrush(QBrush(Qt::red, Qt::SolidPattern));
brush.setColor(Qt::red);
brush.setStyle(Qt::SolidPattern);
p.setPen(pen);
p.setBrush(brush);
int bc = document()->blockCount();
for (int i = 0; i < bc; i++)
{
qDebug() << i;
QTextBlock block = document()->findBlockByNumber(i);
QRectF bf = document()->documentLayout()->blockBoundingRect(block);
bf = QRectF(bf.left() - 5, bf.top(), 5, bf.height());
p.drawRect(bf);
}
p.end();
QTextEdit::paintEvent(e);
}
主.cpp
#include "MainWindow.h"
#include <QApplication>
#include "LeftBorderTextEdit.h"
int main(int argc, char *argv[])
{
QApplication a(argc, argv);
MainWindow w;
LeftBorderTextEdit t;
w.setCentralWidget(&t);
w.show();
return a.exec();
}