QTextEdit设置修复行高度,段落间距

时间:2013-09-20 05:34:36

标签: qt height qtextedit

我正在做的事情是一个QTreeWidget,每个Item的文本都是可编辑的。 所以我在一个小部件中组合复选框,QTextEdit / QPlainTextEdit togeter, 和QTreeWidget的每个项目的setItemWidget。 我已经将QTextEdit的scrollBar设置为关闭,我甚至不希望它可以通过鼠标中键滚动。因为我在其父窗口小部件上绘制点线,间距为25像素。我希望每个文本行都固定在每个点线的顶部,不能滚动。

enter image description here enter image description here

所以我需要:

1>确保每个文本行的高度为25像素。每个文本行位于点线上方。

2 - ;将QTextEdit的大小调整为25 * LineCount高度,禁用QTextEdit的滚动功能。

当文本改变时,我将重置Qt :: sizeHintRole数据以调整QTreeWidgetItem的高度。为此,我必须正确计算所需的高度。

所有文本都只是纯文本,但启用了wordwrap。

这就是我所拥有的:

我的设置行高度代码:(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的字符串I setPlainText(): “Small Refine:高级模式没有效果。\ nHaha,bingo!\ n我喜欢多行。” 结果是这样的:

enter image description here

1>问题1:我无法获得正确的行数,包括由wordwrap功能引起的行。

2 - ;问题#2:似乎setLineHeight仅适用于带有一个段落的文本行。 我无法控制不同段落的间距。

因此,如果我手动删除QTextEdit控件中的所有换行符号,并按Enter键重新制作newLine, 它变成了:

enter image description here

这就是我想要的。但我需要的文本也可以通过setText方法设置。

第3>问题#3:仍然可以通过鼠标中键滚动。我在QTextEdit上使用midMouse按钮滚动,我发现这些是行下方的额外像素.QTextEdit是可滚动的。

enter image description here

有人可以帮助解决这三个问题吗?非常感谢:)。

1 个答案:

答案 0 :(得分:2)

1)尝试使用

textEdit->document()->size().height()

2)textCursor仍然在文档的开头(第一个块),使用

QTextCursor cursor(it); 

而是在for-cycle中获取给定QTextBlock的QTextCursor。

3)滚动条:

textEdit->setVerticalScrollBarPolicy(Qt::ScrollBarAlwaysOff);

textEdit->verticalScrollBar()->setMaximum(0)

(或连接信号valueChanged / sliderMove和setValue再次为零)