3

我正在使用 Qt5 和 QScintilla 作为框架,使用 C++ 编写源代码编辑器。在这个项目中,我想不断地显示文本光标的行和列(光标位置),所以我需要一个在文本光标移动时发出的信号。根据 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

感谢您的任何提示!

4

2 回答 2

2

该问题是由在运行时验证的旧连接语法引起的,此外,旧语法还有另一个必须匹配签名的问题。在您的情况下,解决方案是使用没有您提到的问题的新连接语法。

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

有关更多信息,您可以查看:

于 2018-12-16T05:29:35.397 回答
1

谢谢,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;
}

该主题已解决。

于 2018-12-16T06:19:49.070 回答