在QTextEdit中对齐文本?

时间:2014-09-15 19:01:03

标签: c++ qt text-alignment qtextedit

如果我有一个QTextEdit框,我如何以不同的方式在框中对齐不同的文本?例如,我想将一个句子左对齐,并且框中的下一个句子对齐 - 右。这可能吗?如果没有,我怎么能在Qt中实现这个效果?

2 个答案:

答案 0 :(得分:6)

正如文件所说:

void QTextEdit::setAlignment(Qt::Alignment a) [slot]

将当前段落的对齐方式设置为a。有效排列为Qt::AlignLeftQt::AlignRightQt::AlignJustifyQt::AlignCenter(水平居中)。

链接:http://qt-project.org/doc/qt-5/qtextedit.html#setAlignment

因为你可以看到你应该为每个段落提供一些对齐。

小例子:

QTextCursor cursor = ui->textEdit->textCursor();
QTextBlockFormat textBlockFormat = cursor.blockFormat();
textBlockFormat.setAlignment(Qt::AlignRight);//or another alignment
cursor.mergeBlockFormat(textBlockFormat);
ui->textEdit->setTextCursor(cursor);

我的电脑上有哪些结果?

enter image description here

或者更贴近您的问题:

ui->textEdit->clear();
ui->textEdit->append("example");
ui->textEdit->append("example");
QTextCursor cursor = ui->textEdit->textCursor();
QTextBlockFormat textBlockFormat = cursor.blockFormat();
textBlockFormat.setAlignment(Qt::AlignRight);
cursor.mergeBlockFormat(textBlockFormat);
ui->textEdit->setTextCursor(cursor);

ui->textEdit->append("example");

cursor = ui->textEdit->textCursor();
textBlockFormat = cursor.blockFormat();
textBlockFormat.setAlignment(Qt::AlignCenter);
cursor.mergeBlockFormat(textBlockFormat);
ui->textEdit->setTextCursor(cursor);

结果:

enter image description here

答案 1 :(得分:0)

左对齐文本框“TerminalOutput”:

string Wibble="wibble";
TerminalOutput->append(QString::fromStdString(Wibble));
TerminalOutput->setAlignment(Qt::AlignLeft);

右对齐文本框:

string Wobble="wobble";
TerminalOutput->append(QString::fromStdString(Wobble));
TerminalOutput->setAlignment(Qt::AlignRight);

现在,有时,这也发生在 Kosovan 的回答中,我的代码中的对齐设置了前一行而不是当前行。这对我来说是无法解释的。我无法弄清楚为什么会这样。如果有人知道这是为什么,请发表评论,因为这让我发疯。

编辑,我发现了问题。所以对齐工作正常,直到你用光标选择了一些文本。一旦你这样做,对齐就会停止对齐前一行,然后决定影响下一行而不是前一行,这会影响此后的所有其他追加格式。实际上点击文本框内的任何地方,都会这样做,一定是它干扰了qt内部的光标位置概念。

我通过在附加到文本框之前执行以下操作来解决此问题:

QTextCursor newCursor = TerminalOutput->textCursor();
newCursor.movePosition(QTextCursor::End);
TerminalOutput->setTextCursor(newCursor);

它所做的只是将光标移动到文本缓冲区的末尾,这样当你追加时,它会清除用户点击文本框内任意位置的任何光标位置,这解决了我奇怪的小问题。