Я изменяю пример терминала Qt 5 и использую окно QTextEdit в качестве терминальной консоли. Я столкнулся с несколькими проблемами.QTextEdit и взаимодействие с курсором
Qt делает странное толкование возврата каретки ('\ г') в входящих строк. Внезапно, после отправки 3-7, он интерпретирует ('\ r') как новую строку ('\ n'), наиболее раздражающую. Когда я наконец узнал, я решил отфильтровать все «\ r» из входящих данных. Возможно ли это из-за некоторых настроек?
Правильное взаимодействие курсора - это немного проблематично. Я хочу, чтобы консоль имела возможность выбора автоскарта с помощью флажка. Я также хочу, чтобы можно было выбирать текст всякий раз, когда консоль запускается, не теряя при выборе новых данных.
Вот моя текущая функция prinout, то есть слот подключен к сигналу, как только какие-либо данные прибыл:
void MainWindow::printSerialString(QString& toPrint)
{
static int cursPos=0;
//Set the cursorpos to the position from last printout
QTextCursor c = ui->textEdit_console->textCursor();
c.setPosition(cursPos);
ui->textEdit_console->setTextCursor(c);
ui->textEdit_console->insertPlainText(toPrint);
qDebug()<<"Cursor: " << ui->textEdit_console->textCursor().position();
//Save the old cursorposition, so the user doesn't change it
cursPos= ui->textEdit_console->textCursor().position();
toPrint.clear();
}
У меня была проблема, что если пользователь нажал вокруг в консоль, курсор изменит положение, и следующие входящие данные окажутся в неправильном месте. Вопросы:
Если раздел отмечен пользователем, маркировка потеряется при поступлении новых данных.
Когда «форсировать» такой указатель, он получает довольно уродливое поведение автопрокрутки, которое невозможно отключить.
Если курсор изменен другой частью программы между распечатками, мне также необходимо записать это как-то.
Функция Append, которая звучит как более логическим решение, отлично работает для добавления целой полной строки, но отображает неустойчивое поведение при печати только части входящей строки ввода символов и новые линии везде.
Я не нашел ни одной установки относительно этого, но должен быть один? Установка QTextEdit на «readOnly» не отключает взаимодействие курсора.
3.An Идея заключается в том, чтобы иметь два курсора в консоли. Один невидимый, который используется для распечаток и который вообще не может манипулировать для пользователя, и один видимый, который позволяет пользователю выбирать текст. Но, как это сделать, меня бьют :) Любой связанный пример, FAQ или руководство очень оценены.
Хороший ответ! Эффективное использование замены() при избавлении от возврата каретки. Это распространенная проблема? Перед тем, как копать больше в нем, фиксируется позиция, в которой материал должен быть напечатан (не контролируется пользователем напрямую) и promptPosition позицию, которую пользователь может изменить? – user3050215
@ user3050215: 1) Я разработал в Linux при переносе в Windows эту (мини) проблему исправили с помощью этого простого #ifdef. 2) fixedPosition сохраняет последнее редактируемое положение пользователя - то есть, когда каретка была помещена после вывода, позже была введена подсказка, чтобы позволить выход из процесса асинхронизации без вмешательства в модальное диалоговое окно. Чистый эффект трудно объяснить словами, очевидно, что при выдаче любой команды, которая производит вывод из фонового движка - например [consult] (http://www.swi-prolog.org/pldoc/doc_for?object=consult/1) ... – CapelliC