- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
免责声明:我正在使用 PySide2
;然而,Qt 中的任何答案( pyqt5
、 Qt
c++)都可以。
我在文本编辑中设置文档大小时遇到问题。
当我初始化QTextEdit
时与 setText(text:QString)
, QTextEdit
的大小调整行为的QTextDocument
变化。因此申请setPageSize
被忽略,除非文本在小部件的视口(viewport)上溢出。
如果我不这样做setText
最初,无论我是否调整窗口大小,都会正确考虑文档大小。
下面是我所经历的奇怪行为的一个最小示例。如果您运行代码,然后尝试调整窗口大小,您将看到当文本超出小部件时会考虑 pageSize;但是,如果不是,则 QTextEdit
的 pageSize 将与其宽度匹配,其高度为 -1。
如果您关闭SET_TEXT_TEST
那么从一开始就没有问题。如果有任何解释或解决方法,我很乐意听到。
import PySide2
from PySide2.QtGui import *
from PySide2.QtWidgets import *
from PySide2.QtCore import *
from PySide2.QtPrintSupport import *
SET_TEXT_TEST = True
class IPageEdit(QTextEdit):
def __init__(self, parent=None):
super().__init__(parent)
# these lines don't seem to do anything
doc = self.document()
pageSize = QPageSize(QPageSize.A6).size(QPageSize.Point)
doc.setPageSize(QPageSize(QPageSize.A6).size(QPageSize.Point))
def paintEvent(self, event):
doc = self.document()
pageSize = QPageSize(QPageSize.A6).size(QPageSize.Point)
doc.setPageSize(QPageSize(QPageSize.A6).size(QPageSize.Point))
print('({},{}) ({},{})'.format(
pageSize.width(),
pageSize.height(),
doc.pageSize().width(),
doc.pageSize().height()))
painter = QPainter(self.viewport())
doc.drawContents(painter)
class IMainWindow(QMainWindow):
def __init__(self, parent=None):
super().__init__(parent)
self.resize(1000, 500)
self.setContentsMargins(20, 20, 20, 20)
pageEdit = IPageEdit(self)
if SET_TEXT_TEST:
pageEdit.setText('''\
Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Velit aliquet sagittis id consectetur purus ut faucibus pulvinar elementum. Metus vulputate eu scelerisque felis imperdiet proin fermentum leo vel. Massa tincidunt nunc pulvinar sapien et ligula ullamcorper malesuada proin. Enim neque volutpat ac tincidunt vitae semper. Leo duis ut diam quam nulla porttitor massa id neque. Cras pulvinar mattis nunc sed blandit libero volutpat. Eleifend quam adipiscing vitae proin sagittis. Nulla facilisi cras fermentum odio eu feugiat pretium nibh. Tellus molestie nunc non blandit massa enim nec dui nunc. Eget nullam non nisi est sit amet. Sed odio morbi quis commodo odio aenean sed. Nibh ipsum consequat nisl vel pretium lectus quam id leo. Adipiscing diam donec adipiscing tristique risus nec. Sit amet consectetur adipiscing elit ut aliquam purus sit. Sed sed risus pretium quam. Elit pellentesque habitant morbi tristique senectus. Turpis egestas sed tempus urna.
Nunc aliquet bibendum enim facilisis gravida neque. Condimentum id venenatis a condimentum vitae sapien pellentesque habitant. Purus sit amet volutpat consequat mauris. Mauris in aliquam sem fringilla ut morbi tincidunt augue interdum. Ultrices mi tempus imperdiet nulla malesuada pellentesque elit. Dolor purus non enim praesent elementum facilisis leo vel. Donec adipiscing tristique risus nec. Non consectetur a erat nam. Fusce id velit ut tortor pretium. Sit amet nulla facilisi morbi tempus iaculis urna. Vel facilisis volutpat est velit egestas. Ac orci phasellus egestas tellus rutrum tellus pellentesque.
Turpis tincidunt id aliquet risus feugiat in ante metus. Nibh ipsum consequat nisl vel pretium lectus quam id leo. Amet luctus venenatis lectus magna fringilla urna. Morbi blandit cursus risus at ultrices mi tempus imperdiet. Sit amet porttitor eget dolor. Nec ultrices dui sapien eget mi. Turpis massa tincidunt dui ut ornare lectus sit. Ac odio tempor orci dapibus. Et netus et malesuada fames ac turpis egestas integer. Morbi quis commodo odio aenean. Vulputate sapien nec sagittis aliquam malesuada. Lobortis mattis aliquam faucibus purus in. Sem fringilla ut morbi tincidunt. Volutpat commodo sed egestas egestas fringilla phasellus faucibus.
Tempor orci dapibus ultrices in iaculis nunc sed augue. Etiam sit amet nisl purus in mollis nunc sed. Nulla porttitor massa id neque aliquam vestibulum morbi. Nibh tortor id aliquet lectus proin. Venenatis urna cursus eget nunc scelerisque viverra mauris in. Volutpat odio facilisis mauris sit. Magna eget est lorem ipsum dolor sit amet consectetur. Lacinia quis vel eros donec ac odio tempor. Justo donec enim diam vulputate. Fringilla urna porttitor rhoncus dolor purus. In dictum non consectetur a erat nam at. Egestas erat imperdiet sed euismod nisi porta lorem. Scelerisque fermentum dui faucibus in ornare quam viverra orci. Lectus proin nibh nisl condimentum id venenatis a. Faucibus pulvinar elementum integer enim neque volutpat ac tincidunt. Habitasse platea dictumst quisque sagittis purus sit amet volutpat consequat. Enim sed faucibus turpis in.
Eu lobortis elementum nibh tellus molestie nunc non blandit. Dui id ornare arcu odio. Sit amet nisl purus in mollis nunc sed id semper. Senectus et netus et malesuada fames. Porttitor rhoncus dolor purus non enim praesent elementum. Amet est placerat in egestas erat imperdiet sed euismod. Mi tempus imperdiet nulla malesuada pellentesque elit eget. Tellus molestie nunc non blandit massa enim nec. Pellentesque eu tincidunt tortor aliquam nulla. Ut consequat semper viverra nam libero.
''')
self.setCentralWidget(pageEdit)
if __name__ == '__main__':
import sys
app = QApplication(sys.argv)
wnd = IMainWindow()
wnd.show()
sys.exit(app.exec_())
为了演示这里有一些图像:
最佳答案
根据@Heike的回复,解决方案就像添加这行代码一样简单:
class IPageEdit(QTextEdit):
def __init__(self, parent=None):
super().__init__(parent)
self.setLineWrapMode(QTextEdit.FixedPixelWidth)
...
这会产生正确的调整大小行为,并且 pageSize 在调整大小后保留其值。
关于python - QTextEdit 的 QTextDocument 在 SetText 后无法调整页面大小,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56050260/
我需要制作一个非常大的 QTextDocument 的预览版拷贝(在富文本模式下)。所以,我需要类似 clone() 函数的东西,但能够指定限制。IE。 克隆(int maxChars)。正如我从 c
我想使用 setDefaultStyleSheet 函数将一些自定义样式表应用到 QTextDocument,但是它被忽略了。 根据this帖子我应该在设置html内容后添加样式表,但这并没有解决我的
有一段Qt/C++代码: #include #include #include #include int main(int argc, char *argv[]) { QCoreApp
我正在尝试从 QTextDocument 生成一个 PDF 文件,工作正常。当我只想为特定的 使用自定义字体时,问题就来了目的。我尝试使用 QFontDatabase::addApplication
我尝试使用 QTextDocument 在 QImage 上绘制文本。如何设置默认(“正文”)样式? 目前我使用 标签,像这样 QPainter painter(_image); QTextDocum
我想在 QTextDocument 中的文本周围有一个唯一的左边框 我认为所需的 css 是 Hello World 但假设我有这个 qt 代码 #include #include #incl
我的程序使用几个不同的 QTextBrowser 向用户显示内容。其中一些内容带有图像。我将其从文件加载到 QPixmap 中,并将它们添加到要显示的文本文档中。 假设这样一段代码: QTextBro
给定一个具有特定宽度和高度的QTextDocument,有没有办法获取给定页面的内容(如果页面上有图像,则为纯文本+图像URL)给定它页码? 这是我想要实现的示例: QString getTextFo
我正在编写一个将地址直接打印到信封上的应用程序。我正在使用 QTextDocument,问题是它的方法 print() 添加了页码,这在信封中是不正确的。 一些代码,以备不时之需: void Main
给定一个特定的宽度,我想找出 QTextDocument 的高度.换句话说,如果 QTextEdit包含 QTextDocument w 宽,它的最小高度 h 是多少,以便在不需要滚动条的情况下完全显
我目前正在为我的大学类(class)开发一个简单的在线纯文本编辑器。我用 QTextDocument::contentsChange(index, charsRemoved, charsAdded)确
我正在尝试打印 QTextEdit 的内容。为此,我正在使用 QTextDocument::print(QPrinter*)。这样做,页码会自动添加到页面的右下角。 有什么方法可以改变它的格式/移动它
美好的一天,问题很简单:使用 setHtml() 方法时,我无法在 QTextDocument 中换行。我的输入是: "Hello World a" 我的输出是: 你好 世界a 这意味着斜体和粗体文
我认为问题完全出在 QTextDocument 对非标准字体的管理上。尽管如此,我还是会概述我正在做的事情,以防我忽略了其余代码中的某些内容。 我正在尝试混合打印富文本(使用支持 qt 的 html
我想计算 QTextDocument 中每行的边界矩形(位置、大小)。我尝试绘制每一行提供的矩形,但我遇到了麻烦! 这是我做的: QTextBlock currentBlock = tempDocum
我对 QTextDocument::size() 有疑问 每次用户手动向 TextEdit 输入内容时,文档的大小都会更新。 (所以在 SIGNAL textChanged 中它工作正常)。但是,我通
我正在努力解决 QT5 问题。我正在尝试构建(然后在 QPainter 对象上绘制)一个 HTML 表格。这是我的代码: QTextDocument td; QString table_style=
在较早的 stackoverflow 之后 discussion ,我正在尝试使用 Qt 和 QTextDocument 生成包含文本和图像的 pdf。 这是我作为 MCVE 的代码: #includ
我有这个设置: // ... // variable document is a QTextDocument* which has some 'RichText' + 'Images' QTextEd
我想生成一个包含文本和 QChart 的 pdf 报告。我目前使用 QTextDocument 并将图表作为图像添加到其中,然后我使用 QPdfWriter 导出为 pdf。 #include #i
我是一名优秀的程序员,十分优秀!