查看完整版本: [-- Qpainter  如何 绘制如下所示 --]

QTCN开发网 -> Qt基础编程 -> Qpainter  如何 绘制如下所示 [打印本页] 登录 -> 注册 -> 回复主题 -> 发表主题

xing181512 2021-01-04 17:25

Qpainter  如何 绘制如下所示

注册:QT for
Test


使用QPainter 如何绘制如上所示,在一个固定的宽度区域 ,文字的背景色随文字增加/换行 而增加/换行

XChinux 2021-01-04 20:45
这个似乎难办到。
QFontMetrics通过这个类,可以获得你要绘制的文字到底要占多大的区域,可能能自己计算出来。

青空飞羽 2021-01-04 21:06
QLable有个wordWrap 属性,应该有用

wordWrap : bool
This property holds the label's word-wrapping policy
If this property is true then label text is wrapped where necessary at word-breaks; otherwise it is not wrapped at all.
By default, word wrap is disabled.

snow_man_0 2021-01-05 02:35
QPainter::drawText(const QRectF &rectangle, int flags, const QString &text, QRectF *boundingRect = nullptr)
flags: Qt::TextWordWrap
QFontMetrics算出rectangle,填充颜色就可以


lemonzll 2021-01-05 08:59
  1. void Widget::paintEvent(QPaintEvent *event)
    {
        QPainter painter(this);
        QTextDocument doc;

        QColor textColor = "green";  //文字颜色

        doc.setDefaultStyleSheet(QStringLiteral("span { background-color: %1}")
            .arg(textColor.name()));
        doc.setHtml(tr("<p>Register: <span>Qt for test Qt for test Qt for test Qt for test</span></p>"));
        doc.setDocumentMargin(1);

        doc.setTextWidth(this->width() / 2);  //设置绘制区域宽度,这里例子是只有整体宽度一半
        doc.drawContents(&painter);
    }


xing181512 2021-01-05 10:25
厉害,可以实现

xing181512 2021-01-05 11:20
lemonzll:void Widget::paintEvent(QPaintEvent *event)
{
    QPainter painter(this);
    QTextDocument doc;
....... (2021-01-05 08:59) 

再请教下,要是我先在指定区域内绘制,如何实现呢,

lemonzll 2021-01-05 13:23
  1. void Widget::paintEvent(QPaintEvent *event)
    {
        QPainter painter(this);
        QTextDocument doc;
        QColor textColor = "green";  //文字颜色
        doc.setDefaultStyleSheet(QStringLiteral("span { background-color: %1}")
                                 .arg(textColor.name()));
        doc.setHtml(tr("<p>Register: <span>Qt for test Qt for test Qt for test Qt for test</span></p>"));
        doc.setDocumentMargin(1);


        auto r = this->rect();
        r.setWidth(r.width() / 2);
        r.setHeight(r.height() / 2);
        r.moveCenter(r.bottomRight());   //构建个画图用的矩形。这里是放在中间的1/4个矩形


        painter.drawRect(r);   //绘图区域画出来,方便比较


        painter.save();
        painter.translate(r.topLeft());  //平移到画图区域左上角
        doc.setTextWidth(r.width());  //设置画图区域宽度
        //doc.drawContents(&painter, QRect{0, 0, r.width(), r.height()});  //加上第二个参数可用来使文字不超过矩形范围,这里演示不启用这个
        doc.drawContents(&painter);
        painter.restore();
    }

把qpainter的坐标平移下再画图就可以了。




xing181512 2021-01-05 14:07
lemonzll:void Widget::paintEvent(QPaintEvent *event)
{
    QPainter painter(this);
    QTextDocument doc;
    QColor textColor = "green";  //文字颜色
....... (2021-01-05 13:23) 



查看完整版本: [-- Qpainter  如何 绘制如下所示 --] [-- top --]



Powered by phpwind v8.7 Code ©2003-2011 phpwind
Gzip disabled