QScintilla, как непрерывно получать позицию курсора в виджете textEdit?

Я работаю над редактором исходного кода на C ++, используя Qt5 и QScintilla в качестве фреймворка. В этом проекте я хочу постоянно показывать строку и столбец текстового курсора (положение курсора), поэтому мне нужен СИГНАЛ, который выдается при каждом перемещении текстового курсора. Согласно документации QScintilla, cursorPositionChanged (int line, int index) испускает полезный сигнал всякий раз, когда курсор перемещается, поэтому я предполагаю, что это должен быть метод, который мне нужен? Это то, что я сделал до сих пор:

// notify if cursor position changed
connect(textEdit, SIGNAL(cursorPositionChanged(int line, int index)), this, SLOT(showCurrendCursorPosition()));

мой код компилируется, и окно редактора отображается как требуется, но, к сожалению, я получил предупреждение:

QObject::connect: No such signal QsciScintilla::cursorPositionChanged(int line, int index)

Может кто-нибудь предоставить мне пример QScintilla C ++ или Python, показывающий, как непрерывно получать и отображать текущую позицию курсора?

Полный исходный код размещен здесь:
https://github.com/mbergmann-sh/qAmigaED

Спасибо за любые подсказки!

2

Решение

Проблема вызвана старым синтаксисом соединения, который проверяется во время выполнения, кроме того, старый синтаксис имеет еще одну проблему, которая должна соответствовать сигнатурам. В вашем случае решение состоит в том, чтобы использовать новый синтаксис соединения, в котором нет проблем, о которых вы упомянули.

connect(textEdit, &QTextEdit::cursorPositionChanged, this, &MainWindow::showCurrendCursorPosition);

Для получения дополнительной информации вы можете проверить:

2

Другие решения

Спасибо, eyllanesc, ваше решение работает отлично!
Я также нашел рабочее решение самостоятельно, просто пришлось удалить именованные переменные из вызова подключения:

// notify if cursor position changed
connect(textEdit, SIGNAL(cursorPositionChanged(int, int)), this, SLOT(showCurrendCursorPosition()));

//
// show current cursor position and display
// line and row in app's status bar
//
void MainWindow::showCurrendCursorPosition()
{
int line, index;
qDebug() << "Cursor position has changed!";
textEdit->getCursorPosition(&line, &index);
qDebug() << "X: " << line << ", Y: " << index;
}

Эта тема решена.

2

По вопросам рекламы [email protected]