QT QTextBrowser отключает позицию записи при щелчке левой кнопкой мыши

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

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

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

Пример:

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

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

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

Имя устройства: Самсони

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

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

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

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

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

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


person John    schedule 02.09.2018    source источник
comment
попробуйте с: setReadOnly(true);   -  person eyllanesc    schedule 03.09.2018
comment
эта опция предназначена только для предотвращения удаления пользователем строк, не решающих проблему   -  person John    schedule 03.09.2018
comment
хорошо, я не пробовал, я просто создаю свой тестовый проект, но было бы интересно предоставить минимально воспроизводимый пример, может ли пользователь редактировать текст?   -  person eyllanesc    schedule 03.09.2018
comment
Я добавляю текст с append() и не могу воспроизвести вашу проблему. Как вы добавляете текст?   -  person eyllanesc    schedule 03.09.2018
comment
Нет, я использую inserthtml, чтобы предотвратить добавление \n   -  person John    schedule 03.09.2018
comment
Можете ли вы предоставить минимально воспроизводимый пример?   -  person eyllanesc    schedule 03.09.2018
comment
Хорошо, минутку   -  person John    schedule 03.09.2018
comment
Отредактировал исходный пост @eyllanesc   -  person John    schedule 03.09.2018
comment
Это минимально воспроизводимый пример? Вы читали ссылку?   -  person eyllanesc    schedule 03.09.2018
comment
Да, я прочитал это, и мне нужно много времени, чтобы воссоздать минимальный пример проблемы, но я думаю, что письменного примера достаточно и я могу понять проблему.   -  person John    schedule 03.09.2018
comment
Что ж, в данном случае главное, что проблема вызвана функцией insertHtml(). С другой стороны, MCVE не занимает много времени, посмотрите на мое решение, это практически MCVE. Я понимаю проблему, не нуждаясь в вашем редактировании, но проблема в том, что я не могу воспроизвести ее, если вы не укажете, что используете insertHtml(), поэтому важно, чтобы вы предоставили MCVE.   -  person eyllanesc    schedule 03.09.2018
comment
@Джон, этого может быть достаточно, чтобы понять проблему, но как-то нехорошо заставлять всех желающих помочь создать тестовый пример, чтобы попытаться воспроизвести вашу проблему, только потому, что вы не хотите тратить время на это. сделай сам.   -  person scopchanov    schedule 03.09.2018


Ответы (1)


В документах указано, что при использовании 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();
}
person eyllanesc    schedule 03.09.2018
comment
@John, тогда это означает, что нам нужен MCVE, я пытался воспроизвести вашу проблему, но не смог, и причина очевидна: я не знаю, как вы реализовали свой код, запрос использует cursor.insertHtml(text);, а не your_QTextBrowser->insertHtml(text). В любом случае, если вам нужна помощь, вам придется много работать и предоставить достойный минимально воспроизводимый пример :) - person eyllanesc; 03.09.2018
comment
Большое спасибо, проблема решилась добавлением этих кодов QTextCursor cursor = your_QTextBrowser->textCursor(); cursor.movePosition(QTextCursor::End); cursor.insertHtml(text); вместо textbrowser->inserthtml - person John; 03.09.2018
comment
@John, это мое решение, мне любопытно, когда вы сказали: к сожалению, проблема не решена, какой код вы пробовали? - person eyllanesc; 03.09.2018
comment
Я добавил только эти QTextCursor cursor = your_QTextBrowser->textCursor(); // get current cursor cursor.movePosition(QTextCursor::End); // move it to the end of the document и добавил textsbrowser->inserthtml вместо cursor.inserthtml, это была моя ошибка, еще раз спасибо - person John; 03.09.2018
comment
@John Это было мое подозрение, проанализируйте ответы, прежде чем использовать его для этого в моем ответе, я не только добавляю код, но и трачу время на его поддержку. - person eyllanesc; 03.09.2018
comment
Прошу прощения за свои ошибки, мне просто нужно очень быстрое тестирование в данный момент, поэтому я забыл много важных правил и действий, еще раз спасибо за вашу помощь. - person John; 03.09.2018