QTextOption includeTrainlingSpaces - PullRequest
       55

QTextOption includeTrainlingSpaces

0 голосов
/ 06 марта 2020

Я изучаю флаги QTextOption. В нем есть флаг includeTrailingSpaces. Я установил опцию для моего редактирования. и увидел результат.

QTextOption.IncludeTrailingSpaces Когда эта опция установлена, QTextLine.naturalTextWidth () и naturalTextRect () вернут значение, которое включает в себя ширину конечных пробелов в тексте; в противном случае эта ширина исключается.

Но в обоих случаях указана ширина пустого пространства. Когда и где я должен использовать этот флаг? Я хочу кое-что прояснить.

Пример кода

import os
import PySide2
from PySide2 import QtWidgets , QtGui , QtCore
import sys
dirname  =  os.path.dirname(PySide2.__file__)
plugin_path  =  os.path.join(dirname, 'plugins', 'platforms')
os.environ['QT_QPA_PLATFORM_PLUGIN_PATH']  =  plugin_path    
def main():
    if QtWidgets.QApplication.instance() is None:
        app = QtWidgets.QApplication([])
    else:
        app = QtWidgets.QApplication.instance()
    textEdit = QtWidgets.QTextEdit()
    option = textEdit.document().defaultTextOption()
    option.setFlags(
#                    QtGui.QTextOption.Flag.AddSpaceForLineAndParagraphSeparators|\
                    QtGui.QTextOption.Flag.IncludeTrailingSpaces
#                    QtGui.QTextOption.Flag.ShowDocumentTerminator|\
#                    QtGui.QTextOption.Flag.ShowLineAndParagraphSeparators|\
#                    QtGui.QTextOption.Flag.ShowTabsAndSpaces|\
#                    QtGui.QTextOption.Flag.SuppressColors
                    )
    def checkTranlingSpaceEffect():
        tc = textEdit.textCursor()
        block = tc.block()
        layout = block.layout()
        line = layout.lineAt(0)
        naturalTextWidth = line.naturalTextWidth()
        #It seems that it is the same result when the flag is not set.
        print(naturalTextWidth)        
    textEdit.document().setDefaultTextOption(option)
    textEdit.connect(textEdit, QtCore.SIGNAL("textChanged()"), checkTranlingSpaceEffect)        
    textEdit.show()
    sys.exit(app.exec_())
if __name__ ==  "__main__":
    main()

1 Ответ

0 голосов
/ 06 апреля 2020

В результате исследования этот флаг в настоящее время недействителен.

Согласно woboq, includeTranlingSpaces зависит от SpaceData.length.

Эта переменная используется в layout_helper метод в QTextLayout.

Но мы не можем использовать этот метод сейчас, несмотря на существование документации API.

Если мы хотим удалить пробелы, у нас нет выбора, кроме как удалить пробелы сами по себе.

Если я думаю об этом сейчас, эти флаги улучшены с Qt4.

Этот флаг будет улучшен в будущем выпуске. Вероятно.

...