diff --git a/src/plugins/cppeditor/cppeditorwidget.cpp b/src/plugins/cppeditor/cppeditorwidget.cpp index 69dd2f37546..59de411d936 100644 --- a/src/plugins/cppeditor/cppeditorwidget.cpp +++ b/src/plugins/cppeditor/cppeditorwidget.cpp @@ -882,7 +882,10 @@ bool CppEditorWidget::followQrcUrl(const QTextCursor &cursor, if (!nodeForPath) return false; - processLinkCallback(Link(nodeForPath->filePath())); + Link link(nodeForPath->filePath()); + link.linkTextStart = d->m_lastSemanticInfo.doc->translationUnit()->getTokenPositionInDocument(literalAst->literal_token, document()); + link.linkTextEnd = d->m_lastSemanticInfo.doc->translationUnit()->getTokenEndPositionInDocument(literalAst->literal_token, document()); + processLinkCallback(link); return true; } diff --git a/src/plugins/qmljseditor/qmljseditor.cpp b/src/plugins/qmljseditor/qmljseditor.cpp index d24e873dfee..0465648ba0e 100644 --- a/src/plugins/qmljseditor/qmljseditor.cpp +++ b/src/plugins/qmljseditor/qmljseditor.cpp @@ -24,7 +24,10 @@ #include #include +#include #include +#include +#include #include #include @@ -767,6 +770,25 @@ void QmlJSEditorWidget::findLinkAt(const QTextCursor &cursor, // string literals that could refer to a file link to them if (auto literal = cast(node)) { const QString &text = literal->value.toString(); + if (text.startsWith("qrc:/")) { + const ProjectExplorer::Project * const project = ProjectExplorer::ProjectTree::currentProject(); + if (project && project->rootProjectNode()) { + const ProjectExplorer::Node * const nodeForPath = project->rootProjectNode()->findNode( + [qrcPath = text.mid(text.indexOf(':') + 1)](ProjectExplorer::Node *n) { + if (!n->asFileNode()) + return false; + const auto qrcNode = dynamic_cast(n); + return qrcNode && qrcNode->qrcPath() == qrcPath; + }); + if (nodeForPath) { + Link link(nodeForPath->filePath()); + link.linkTextStart = literal->firstSourceLocation().begin(); + link.linkTextEnd = literal->lastSourceLocation().end(); + processLinkCallback(link); + return; + } + } + } Utils::Link link; link.linkTextStart = literal->literalToken.begin(); link.linkTextEnd = literal->literalToken.end();