python - qt富文本排版求助。
迷茫
迷茫 2017-04-18 09:53:34
[Python讨论组]

问题

  1. 如何使用qt富文本在同一行中左右分别放置内容

  2. 如何正确的组合QTextFrame等内容

如何使用qt富文本在同一行中左右分别放置内容

简而言之,需要在QLabel的一行里左对齐放置一些文字,右对齐放置一些文字。

关于限定QLabel:

  • 由于需要跨QLabel选择文字,所以无法使用layout

  • 由于之后的内容需要自动折行,所以paintEvent也并不容易

  • 不过QTextEdit是可行的

目前的尝试:

  • 尝试过使用qt支持的富文本,没有找到可用的属性(至多使用p的float属性,在两行中左右放置)

  • 尝试过使用qt的QTextDocument等内容在QTextEdit中拼接,没有找到可用的方法

如何正确的组合QTextFrame等内容

在拼接过程中会产生多余的行。

以以下简化过的需求为例:

  • 类聊天框,两条信息背景颜色不同

  • 消息全文左右上下空出10px(这是为什么要在QTextFrame里面套QTextBlock的原因,只是写着不用实现)

实现代码基本如下:

import sys
from PyQt4.QtGui import *

msgList = ['Hi', 'Hello', 'How are you', 'Fine thank you and you im fine too']

app = QApplication(sys.argv)

ted = QTextEdit()
cursor = ted.textCursor()
for i, msg in enumerate(msgList):
    frameFormat = QTextFrameFormat()
    frameFormat.setBackground(QColor(227, 239, 255)
        if i % 2 else QColor(129, 134, 144))
    blockFormat = QTextBlockFormat()
    blockFormat.setLeftMargin(10)

    cursor.movePosition(QTextCursor.End)
    cursor.insertFrame(frameFormat)
    cursor.insertBlock(blockFormat)
    cursor.insertText(msg)

mainWindow = QWidget()
layout = QVBoxLayout()
layout.addWidget(ted)
mainWindow.setLayout(layout)
mainWindow.show()
sys.exit(app.exec_())

产生问题:

QTextFrame和QTextBlock都会产生一行计划之外的空行,分别对应图中1和2。

尝试了很久都没能解决,万望各位不吝赐教!

迷茫
迷茫

业精于勤,荒于嬉;行成于思,毁于随。

全部回复(2)
大家讲道理

个人认为这种需求还是要上paintEvent来解决。有些需求本身就很复杂,只能硬怼,没有取巧的方法……

天蓬老师

如果会写HTML的话,可以先生成HTML文本,然后使用QTextEdit(不支持js)加载就是。
如果需要更复杂,可以使用Qt的WebView等相关模块去实现。

热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板
关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新 English
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送
PHP中文网APP
随时随地碎片化学习

Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号