问题
如何使用qt富文本在同一行中左右分别放置内容
如何正确的组合QTextFrame等内容
如何使用qt富文本在同一行中左右分别放置内容
简而言之,需要在QLabel的一行里左对齐放置一些文字,右对齐放置一些文字。
关于限定QLabel:
由于需要跨QLabel选择文字,所以无法使用layout
由于之后的内容需要自动折行,所以paintEvent也并不容易
不过QTextEdit是可行的
目前的尝试:
尝试过使用qt支持的富文本,没有找到可用的属性(至多使用div的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。
个人认为这种需求还是要上paintEvent来解决。有些需求本身就很复杂,只能硬怼,没有取巧的方法……