如何在QTextEdit中为QTextFrame或QTextBlock提供背景图像?

wat*_*erd 5 qt qtextedit

我正在开发一个IM工具,作为其中的一部分,我必须开发一个BubbleChatWidget所有消息项都有bubble-like背景图像.我想我可以实现我的目标QTextEidt,但我不知道如何给'QTextFrame'或QTextBlock背景图片.

所以我的问题是如何给出QTextFrame或者QTextBlock背景图像QTextEdit?如果QTextEdit不能满足我的要求,如何与其他人实现我的目标Qt techniques

BubbleChatWidget5含有clickable文本或pictures.And你不能忘记的事实BubbleChatWidget可以含有数千种商品.

下面的图片显示了我想要的内容.

图片说明

mhc*_*rvo 6

Qt样式表非常适合实现您的需求.

解决方案是使用边框图像.幸运的是,你可以用样式表做到这一点,你可以设计样式QTextEdit.

关于QTextBlocks或QTextFrames 样式: A QTextEdit是一个显示QTextDocument可以包含QTextBlocks和QTextFrames 的小部件.框架和块是文本容器,它为文档中的文本提供结构,但它们不是由单独的小部件呈现的.因此,他们无法独立设计.我建议的是QTextEdit为每条消息使用一个或其他小部件,并妥善管理随之而来的内存使用增加.

我将揭示如何设置文本编辑的样式.

首先,拍摄所需边框的干净图像.使用一点Photoshop我已经准备好了自己的图像(不像生产应用程序那样干净):

bkg.png

允许类QTextEdit及其子类的样式对象.

QTextEdit {
    background-color: #eaedf2;              /* Same gray in your background center */
    border-image: url(":/images/bkg.png");  /* The border image                    */
    border-top-width: 11px;
    border-right-width: 4px;
    border-bottom-width: 4px;
    border-left-width: 11px;
}
Run Code Online (Sandbox Code Playgroud)

将上一个样式表设置为文本编辑的容器将所有这些都转换为此样式

在此输入图像描述

与您想要的外观非常相似的东西.当然,你必须准备一个好的边框图像,并更好地调整边框尺寸,但我认为这可能有所帮助.

如果您想要传入和传出消息的不同样式,则必须在样式表中正确区分并选择它们.检查这个以供参考.


hii*_*ger 3

为此,您需要修改 Qt 的源代码。

我去年就这么做过。

您可以为框架设置背景图像(气泡图像)。

如果您使用 Qt 4.8.6,请找到 qtextdocumentlayout.cpp,第 402 行:

默认填充 fillBackground 实现是

 p->fillRect(rect, brush);
Run Code Online (Sandbox Code Playgroud)

您可以更改为qDrawBorderPixmap来绘制气泡背景。