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

时间:2014-09-10 03:17:35

标签: qt qtextedit

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

所以我的问题是如何在QTextBlock中提供QTextFrameQTextBlock背景图片?如果QTextEdit无法满足我的要求,如何实现我的目标与其他QTextEdit

Qt techniques可能包含BubbleChatWidget个文字或图片。您不能忘记clickable可能包含数千个项目的事实。

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

picture description

4 个答案:

答案 0 :(得分:5)

Qt样式表非常适合实现您的目标。

解决方案是使用border image。幸运的是,您可以使用样式表来执行此操作,并且可以设置QTextEdit s。

的样式

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

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

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

bkg.png

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

QTextEdit

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

enter image description here

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

如果您想要传入和传出消息的不同样式,那么您将不得不这样做 正确区分并在样式表中选择它们。请查看this以供参考。

答案 1 :(得分:2)

您需要修改Qt的源代码。

我去年做过这件事。

您可以为画面设置背景图像(气泡图像)。

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

默认填充fillBackground实现

 p->fillRect(rect, brush);

您可以更改为 qDrawBorderPixmap ,而不是绘制气泡背景。

答案 2 :(得分:1)

您可以使用QBalloonTip,这是

中定义的内部类
QtDir/5.*/Src/qtbase/src/widgets/util/qsystemtrayicon_p.h

QBalloonTip继承QWidget,并在同一目录的qsystemtrayicon.cpp中实现。它有以下方法来显示气球提示:

void QBalloonTip::balloon(const QPoint& pos, int msecs, bool showArrow)

您可以修改此课程的源代码,以获得所需的气球提示。

答案 3 :(得分:1)

如果您对实现相同功能的开源项目感兴趣(我称之为“泡泡聊天”),您可以在Telegram Desktop和Cutegram > Github上

他们既是电报的客户,也是 Qt / Qml 实施的变体

我认为 Cutegram 更好。

希望这篇小贴士能为您提供帮助。