QTextDocument 中文本之前的边框

问题描述 投票:0回答:2

我想在 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 我得到这个输出

但是正确且所需的输出应该是 -

我想要上面的输出,我缺少什么吗?

c++ css qt qtstylesheets qtextdocument
2个回答
1
投票

不幸的是,

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>

0
投票

例如,

.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();
}
© www.soinside.com 2019 - 2024. All rights reserved.