免责声明:我使用的是PySide2
;但是,Qt(pyqt5
,Qt
c++)中的任何答案都可以。你知道吗
我在文本编辑中设置文档大小时遇到问题。你知道吗
当我用setText(text:QString)
初始化QTextEdit
时,QTextEdit
的QTextDocument
的大小调整行为会改变。因此,应用setPageSize
将被忽略,除非文本溢出小部件的视口。你知道吗
如果一开始我没有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_())
以下是一些图片:
你的
setPageSize
肯定被QTextDocument()
采纳了。你知道吗为了证明这一点,我重写了
resizeEvent()
。 返回空的,也就是说,没有。你知道吗您可以看到文档大小适合您的页面大小。你知道吗
您确定要更改documentsize一次,但是更改后的大小很快就会更改为原始大小。你知道吗
所以你需要注意这些变化。你知道吗
为什么会发生这种变化?
我认为这是因为执行
QTextEdit
resizeEvent
。 如果QTextEdit
执行它,QAbstractTextDocumentLayout
中的documentSizeChanged
信号被发射。你知道吗如果你阻止信号,当
QTextEdit
调整大小时,你就能得到想要的结果。对我来说,这个代码仍然有一些问题,但我想我可以回答你的问题问题。是的,文档长度超过QMainWindow
。您只更改了文档大小,因此QTextEdit
无法显示所有文本。也许,这可能是下一个问题。你知道吗根据@Heike的回答,解决方案非常简单,只需添加以下代码行:
这将产生正确的调整大小行为,并且pageSize在调整大小后保留其值。你知道吗
相关问题 更多 >
编程相关推荐