【问题标题】:How to change background of QGraphicsTextItem?如何更改 QGraphicsTextItem 的背景?
【发布时间】:2016-04-18 23:04:03
【问题描述】:

我想添加一个 QGraphicsTextItem 并且我想改变背景的颜色。我的意思是我希望包含文本的 boundingRect 具有特定的颜色。一种方法是创建一个 QGraphicsRectItem 并将其放在文本的背面,但我想知道是否还有其他方法可以做到这一点?

感谢您的帮助!

【问题讨论】:

    标签: qt graphics


    【解决方案1】:

    我会继承QGraphicsTextItem,例如:

    class QGraphicsTextItemWithBackgroundColorOfMyChoosing : public QGraphicsTextItem
    {
        public:
            QGraphicsTextItemWithBackgroundColorOfMyChoosing(const QString &text) :
                QGraphicsTextItem(text) { }
    
            void paint( QPainter *painter, const QStyleOptionGraphicsItem *o, QWidget *w) {
                painter->setBrush(Qt::red);
                painter->drawRect(boundingRect());
                QGraphicsTextItem::paint(painter, o, w); 
            }   
    };
    

    【讨论】:

    • 感谢您的回答。那会起作用,但我正在寻找不那么复杂的东西。如果没有其他选择,我会使用你的。
    • 这是一件很常见的事情,有什么复杂的?
    • 我同意你的看法。但是,我需要创建一个全新的类。我以前做过。但是,如果我只是在 QGraphicsScene 中添加一个矩形和文本,我会得到相同的结果(考虑到我想要做的只是显示一个表格),就是这样。谢谢你的回答。我一直在寻找类似 e.d 的答案,但它没有像我预期的那样工作。
    【解决方案2】:

    您可以使用setHtml() 将 HTML 写入 QGraphicsTextItem,因此您可以使用例如填充背景

     item->setHtml("<div style='background-color:#666666;'>" + yourText + "</div>");
    

    【讨论】:

    • 这并没有达到我的预期,因为它只是在文本周围几乎没有着色,而不是整个边界框。但值得一试的是,我最终在背景上画了一个矩形。谢谢!
    【解决方案3】:

    这可能太少,太晚了,但以下对我有用,无需子类或重新实现某些东西。

    item->setHtml(QString("<div style='background:rgba(255, 255, 255, 100%);'>" + QString("put your text here") + QString("</div>") );
    

    【讨论】:

    • 这与三年前@RomhaKorev 提出的solution 有何不同?
    • 这是我发布这篇文章 4 年后的事了。据我所知,无论出于何种原因,如果没有额外的QString,Romha 提出的解决方案对我不起作用。我今天不能说它是什么版本的 Qt(可能是 5.4 左右)。它在 Debian 7 下。(附注:我仍然赞成 Romha 的回答!)。随意标记删除或其他任何内容。我认为它可能会帮助处于类似困境中的其他人(显然它确实做到了,正如我在这里看到的两个赞成票。)
    猜你喜欢
    • 2011-03-23
    • 2011-05-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-08-24
    • 1970-01-01
    • 2023-03-22
    • 2020-05-20
    相关资源
    最近更新 更多