QT QTextBrowser отключить запись позиции при щелчке левой кнопкой мыши - PullRequest
0 голосов
/ 03 сентября 2018

Я пишу приложение QT, которое включает QTextBrowser.

Когда приложение выполняет некоторые функции, функция печатает строки в QTextBrowser и во время записи строк, если я нажимаю левую кнопку мыши на любой напечатанной строке в QTextBrowser, приложение перезапускает печать строк из этой строки, которую я нажал. на.

как это предотвратить?

Пример:

  • Вывод всех функций:

Пользователь устройства: xvalid 1

Модель устройства: альфа 16

Название устройства: Samsoni

Рабочая стадия: уровень 16

  • во время печати строк, если я нажму на вторую строку левой кнопкой мыши, это произойдет:

Пользователь устройства: xvalid 1

Модель устройства: alpha 16 Название устройства: Samsoni

Рабочая стадия: уровень 16

как вы видите приложение переустановит начальную точку записи с того места, где я нажал

1 Ответ

0 голосов
/ 03 сентября 2018

В документах указано, что при использовании 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();
}
...