Я хочу вставить текстовые пассажи в стиле c в текстовый редактор QsciScintilla, если сработал определенный пункт меню. Допустим, пользователь выбирает пункт меню «Вставить / вставить комментарий в стиле c» должен инициировать вставку #include incfile.h в текущую позицию каретки и после текста incfile.h должен быть выбран таким образом, чтобы пользователю нужно было переопределить его только с именем включаемого файла, который он хочет.
Как это может быть сделано? Я думаю, прежде всего мне нужно сохранить текущую позицию каретки (без проблем), затем вставить свой текст (проблема!), Вернуться в сохраненную позицию (без проблем), переместить каретку в позицию строки Nr. 11 (без проблем), установите стартовый маркер (проблема!), Переместите каретку в положение линии Nr. 20 (без проблем), установить слово как помеченное (проблема!), Чтобы оно отображалось как помеченное в редакторе?
Мои основные проблемы:
— как начать вставку а также
Как пометить некоторый текст в текстовом редакторе QsciScintilla?
Изменить: обнаружил, что вставка довольно легко
textEdit->insert("some_text");
Вот пример того, как я реализую то, что знаю до сих пор:
//
// Insert fileheader comment...
//
void MainWindow::actionInsertFileheaderComment()
{
// we need the caret's ("cursor") recent position stored as a starting point for insertion!
int line, index;
textEdit->getCursorPosition(&line, &index); // get the position...
// ...now insert the first line of text!
textEdit->insert("/*\n");
// next, we need to continue printing at a certain location:
textEdit->insertAt(" *\tFile:\t\t " + strippedName(curFile)+ "\n", ++line, 0);
textEdit->insertAt(" *\tVersion:\t\t1.0\n", ++line, 0);
textEdit->insertAt(" *\tRevision:\t\t0\n", ++line, 0);
textEdit->insertAt(" *\n", ++line, 0);
textEdit->insertAt(" *\tDescription:\t\tCHANGE_ME\n", ++line, 0);
textEdit->insertAt(" *\tPurpose:\t\tCHANGE_ME\n", ++line, 0);
textEdit->insertAt(" *\n", ++line, 0);
textEdit->insertAt(" */\n", ++line, 0);
// finally, we set our caret to the next following empty line!
textEdit->setCursorPosition(line + 1, index);
}
Таким образом, есть точка маркировки в определенной позиции слева. Допустим, я хочу, чтобы отмечалось первое занятие CHANGE_ME. Как это получить?
Задача ещё не решена.
Других решений пока нет …