我正在做的是一个 QTreeWidget,每个项目的文本都是可编辑的。所以我在一个小部件中将复选框、QTextEdit/QPlainTextEdit 组合在一起,并为 QTreeWidget 的每个项目设置项目小部件。我已经将 QTextEdit 的滚动条设置为始终关闭,我什至不希望它可以通过鼠标中键滚动。因为我在其父小部件上绘制了点线,间距为 25 像素。我希望每个文本行都固定在每个点线的顶部,不能滚动。
所以我需要:
1> 确保每个文本行的高度为 25 像素。每个文本行都位于点线上方。
2> 将 QTextEdit 的大小调整为 25*LineCount 高度,禁用 QTextEdit 的滚动功能。
当文本更改时,我将重置 Qt::sizeHintRole 数据以调整 QTreeWidgetItem 的高度。为此,我必须正确计算所需的高度。
所有文本都只是纯文本,但启用了自动换行。
这是我所拥有的:
我的设置行高代码:(ui->textLbl 是我的 QTextEdit 小部件,LineHeight 是 25)
QTextDocument* doc = ui->textLbl->document();
QTextCursor textCursor = ui->textLbl->textCursor();
for(QTextBlock it = doc->begin(); it != doc->end(); it = it.next())
{
QTextBlockFormat textBlockFormat = it.blockFormat();
textBlockFormat.setLineHeight(LineHeight,QTextBlockFormat::FixedHeight); //set line height
textCursor.setBlockFormat(textBlockFormat);
ui->textLbl->setTextCursor(textCursor);
}
这是我为项目 #2 设置的字符串:“Small Refine:高级模式无效。\n哈哈,宾果游戏!\n我喜欢多行。” 结果是这样的:
1> 问题 #1:我无法获得正确的行数,其中包括由自动换行功能引起的行。
2> 问题 #2:似乎 setLineHeight 仅适用于有一个段落的文本行。我无法控制不同段落的间距。
因此,如果我手动删除 QTextEdit 控件中的所有换行符,然后按 enter 重新制作 newLine,它会变成这样:
这就是我想要的。但我也需要通过 setText 方法设置文本。
3> 问题#3:仍然可以通过鼠标中键滚动。一旦我在 QTextEdit 上使用 midMouse 按钮滚动,我发现这些是线条下方的额外像素。QTextEdit 是可滚动的。
有人可以帮助解决这三个问题吗?非常感谢 :)