首页 > 解决方案 > Qt C++ 括号匹配和突出显示当前行功能不能一起工作

问题描述

行数 + 突出显示的行 [CodeEditor] * 教程 [底部代码链接]:http ://doc.qt.io/qt-5/qtwidgets-widgets-codeeditor-example.html

括号匹配 * 教程:https ://doc.qt.io/archives/qq/QtQuarterly31.pdf - “Qt Quarterly: Issue 31 · Q3 2009” * 代码[下载包 ZIP 文件]:“Issue 31 · Q3 2009:匹配括号带有 QSyntaxHighlighter · 示例代码”,来自https://doc.qt.io/archives/qq/index.html

问题:我无法让“突出显示的 [当前] 行”和“括号匹配”一起工作 * 在我的项目中:如果我只连接了以下插槽之一,那么相应的功能将根据需要发生,但我想要这两个功能[代码出现在“codeeditor.cpp”中]
connect(this, SIGNAL(cursorPositionChanged()), this, SLOT(highlightCurrentLine())); connect(this, SIGNAL(cursorPositionChanged()), this, SLOT(matchParentheses()));// 与 highlightCurrentLine 槽共享相同的信号

额外细节:* 使用 MinGW 编译器的 Qt Widget 应用程序 * 潜在错误 - 匹配括号 [对此没有做任何事情]: * https://forum.qt.io/topic/13769/bug-in-qt-quarterly-31-匹配括号与 qsyntaxhighlighter

**我正在尝试根据教程使用 Qt 制作代码编辑器,但我基本上已将教程中的代码复制并粘贴到我的项目中,但仍然无法同时使“突出显示的当前行”和“括号匹配”工作一起。**

因为有很多代码,所以我将每个文件的代码都包含在 Hastebin 中。

codeeditor.h: https ://hastebin.com/ogetimapux.cpp

代码编辑器.cpp: https ://hastebin.com/ojagazoboq.cpp

highlighter.h: https ://hastebin.com/amiribaquc.cpp

highlighter.cpp: https ://hastebin.com/isawefequk.cpp

main.cpp: https ://hastebin.com/adelucurak.m

更新 1 使用新的“连接”语法不起作用。也没有在同一个插槽中调用这两个函数。

    setExtraSelections(extraSelections);

当我注释掉代码中多次出现的那一行时;在“highlightCurrentLine”方法中,括号匹配将起作用,但当然这禁用了不需要的当前行的突出显示。

标签: c++qt

解决方案


不确定确切的原因是什么,因为您应该能够将单个信号连接到多个插槽。您始终可以创建另一个调用 highlightCurrentLine() 和 matchParentheses() 的函数,然后将信号连接到该插槽。

如今,connect() 语法也变得更好了,因为您可以这样做: connect(this, &QPlainTextEdit::cursorPositionChanged,this,&CodeEditor:someFunction)


推荐阅读