如果我有一个QTextEdit框,我如何以不同的方式在框中对齐不同的文本?例如,我想将一个句子左对齐,并且框中的下一个句子对齐 - 右。这可能吗?如果没有,我怎么能在Qt中实现这个效果?
答案 0 :(得分:6)
正如文件所说:
void QTextEdit::setAlignment(Qt::Alignment a) [slot]
将当前段落的对齐方式设置为a
。有效排列为Qt::AlignLeft
,Qt::AlignRight
,Qt::AlignJustify
和Qt::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);
我的电脑上有哪些结果?
或者更贴近您的问题:
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);
结果:
答案 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);
它所做的只是将光标移动到文本缓冲区的末尾,这样当你追加时,它会清除用户点击文本框内任意位置的任何光标位置,这解决了我奇怪的小问题。