我正在开发一个IM工具,作为其中的一部分,我必须开发一个BubbleChatWidget所有消息项都有bubble-like背景图像.我想我可以实现我的目标QTextEidt,但我不知道如何给'QTextFrame'或QTextBlock背景图片.
所以我的问题是如何给出QTextFrame或者QTextBlock背景图像QTextEdit?如果QTextEdit不能满足我的要求,如何与其他人实现我的目标Qt techniques?
该BubbleChatWidget5含有clickable文本或pictures.And你不能忘记的事实BubbleChatWidget可以含有数千种商品.
下面的图片显示了我想要的内容.

Qt样式表非常适合实现您的需求.
解决方案是使用边框图像.幸运的是,你可以用样式表做到这一点,你可以设计样式QTextEdit.
关于QTextBlocks或QTextFrames 样式: A QTextEdit是一个显示QTextDocument可以包含QTextBlocks和QTextFrames 的小部件.框架和块是文本容器,它为文档中的文本提供结构,但它们不是由单独的小部件呈现的.因此,他们无法独立设计.我建议的是QTextEdit为每条消息使用一个或其他小部件,并妥善管理随之而来的内存使用增加.
我将揭示如何设置文本编辑的样式.
首先,拍摄所需边框的干净图像.使用一点Photoshop我已经准备好了自己的图像(不像生产应用程序那样干净):

允许类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)
将上一个样式表设置为文本编辑的容器将所有这些都转换为此样式
与您想要的外观非常相似的东西.当然,你必须准备一个好的边框图像,并更好地调整边框尺寸,但我认为这可能有所帮助.
如果您想要传入和传出消息的不同样式,则必须在样式表中正确区分并选择它们.检查这个以供参考.
为此,您需要修改 Qt 的源代码。
我去年就这么做过。
您可以为框架设置背景图像(气泡图像)。
如果您使用 Qt 4.8.6,请找到 qtextdocumentlayout.cpp,第 402 行:
默认填充 fillBackground 实现是
p->fillRect(rect, brush);
Run Code Online (Sandbox Code Playgroud)
您可以更改为qDrawBorderPixmap来绘制气泡背景。