【问题标题】:Qt Text Edit with a fixed number of input lines使用固定数量的输入行进行 Qt 文本编辑
【发布时间】:2013-04-14 09:07:41
【问题描述】:

我的 Gui 中有一个 Qt“文本编辑”小部件,该小部件用于记录某些内容。 我以这种方式添加每一行:

QString str;
str = ...
widget.textEdit_console->append(str);

通过这种方式,文本编辑的高度会在每一行之后越来越高。 在这种情况下,我希望它像一个终端一样,我的意思是在输入一些(我设置的)行之后,对于每个新行,删除文本编辑的第一行以防止它太大! 我应该在输入每个新行时使用计数器并在计数器到达顶部后删除第一个计数器还是有更好的方法在之后自动执行此操作

widget.textEdit_console->append(str);

叫?

【问题讨论】:

  • 如果你正在创建一个记录器,你应该使用QListWidget(或等效的)。这样,每个日志条目都是一个离散的单元,而不是整个事情都是一个单一的文本块。添加您想要的功能也变得非常简单。
  • @cmannett85:既然你提到了,那就是显而易见的解决方案。

标签: c++ qt qt5 qtextedit


【解决方案1】:

感谢cmannett85 的建议,但出于某种原因,我更喜欢“文本编辑”, 我这样解决了我的问题:

void mainWindow::appendLog(const QString &str)
{
    LogLines++;
    if (LogLines > maxLogLines)
    {
        QTextCursor tc = widget.textEdit_console->textCursor();
        tc.movePosition(QTextCursor::Start);
        tc.select(QTextCursor::LineUnderCursor);
        tc.removeSelectedText(); // this remove whole first line but not that '\n'
        tc.deleteChar(); // this way the first line will completely being removed
        LogLines--;
    }
    widget.textEdit_console->append(str);
}

我仍然不知道在使用“文本编辑”时是否有更好更优化的方式

【讨论】:

    【解决方案2】:

    一种简单的方法是关闭垂直滚动条:

     textEdit_console->setVerticalScrollBarPolicy(Qt::ScrollBarAlwaysOff);
    

    【讨论】:

    • 不会自动删除第一行吧?用户只需将光标向上移动即可将其显示出来。
    • @TonyK ~> 你是对的。但我说这是最简单的方法:)。我将编辑我的答案。
    【解决方案3】:

    此代码将光标移动到第一行,然后选择它直到行尾,然后它将删除该行:

    widget.textEdit->moveCursor(QTextCursor::Start, QTextCursor::MoveAnchor);
    widget.textEdit->moveCursor(QTextCursor::EndOfLine, QTextCursor::KeepAnchor);
    widget.textEdit->textCursor().deleteChar();
    widget.textEdit->textCursor().deleteChar();
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2013-07-17
      • 2018-01-09
      • 2018-09-22
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-05-12
      • 2013-03-04
      相关资源
      最近更新 更多