QT QTextBrowser左键单击时禁用写位置

时间:2018-09-02 23:34:20

标签: c++ qt qt5 qtextbrowser

我正在编写一个包含QTextBrowser的QT应用程序。

当应用程序执行某些功能时,该功能将在QTextBrowser中打印行,并且在写入行时,如果我在QTextBrowser上的任何打印行上按鼠标左键,该应用程序将从我按下那条线。

如何防止这种情况?

示例:

  • 所有功能输出:
  

设备用户:xvalid 1

     

设备型号:alpha 16

     

设备名称:Samsoni

     

工作阶段:16级

  • 在行打印期间,如果我用鼠标左键按第二行,则会发生这种情况:
  

设备用户:xvalid 1

     

设备型号:alpha 16设备名称:Samsoni

     

工作阶段:16级

如您所见,该应用程序将从我按下的位置重新设置开始书写点

1 个答案:

答案 0 :(得分:3)

文档表明,当您使用insertHtml()时,它类似于:

edit->textCursor().insertHtml(fragment);

即,将HTML添加到光标所在的位置,并且当您用鼠标按下时,光标将移动到您单击的位置。

解决方案是将光标移到末尾:

QTextCursor cursor = your_QTextBrowser->textCursor(); // get current cursor
cursor.movePosition(QTextCursor::End); // move it to the end of the document
cursor.insertHtml(text); // insert HTML

示例:

#include <QApplication>
#include <QTextBrowser>
#include <QTimer>

int main(int argc, char *argv[])
{
    QApplication a(argc, argv);
    QTextBrowser w;
    int counter = 0;

    QTimer timer;
    QObject::connect(&timer, &QTimer::timeout, [&w, &counter](){
        QString text = QString::number(counter);
        // at html
        QTextCursor cursor = w.textCursor();
        cursor.movePosition(QTextCursor::End);
        cursor.insertHtml(text);
        counter++;
    });
    timer.start(1000);
    w.show();
    return a.exec();
}