我已经在MacBook上安装了QScintilla 2,目前正在使用C++和Qt框架开发一个QScintilla相关的文本编辑器。简单介绍一下我有一个主窗口类,一个编辑器类,还有一些词法分析器。
我的问题是,我发现当我输入应用程序时(即输入编辑器,触发
QKeyEvent*
),应用程序会莫名其妙地崩溃。
我现在使用 Qt Creator 作为 IDE,所以我可以向您展示应用程序输出消息:
19:56:13: Starting /Users/jason/Desktop/Projects/Text/bin/Text.app/Contents/MacOS/Text...
19:56:23: /Users/jason/Desktop/Projects/Text/bin/Text.app/Contents/MacOS/Text crashed.
使用 Qt Creator 的内置调试器为应用程序尝试 LLDB 时,崩溃消息显示如下:
20:01:47: Debugging /Users/jason/Desktop/Projects/Text/bin/Text.app/Contents/MacOS/Text ...
got fallback qt version 0x60402
2023-03-10 20:02:02.734376+0800 Text[5183:2288553] SecTaskLoadEntitlements failed error=22 cs_flags=20, pid=5183
2023-03-10 20:02:02.734572+0800 Text[5183:2288553] SecTaskCopyDebugDescription: Text[5183]/0#-1 LF=0
2023-03-10 20:02:05.190416+0800 Text[5183:2288553] SecTaskLoadEntitlements failed error=22 cs_flags=20, pid=5183
2023-03-10 20:02:05.190551+0800 Text[5183:2288553] SecTaskCopyDebugDescription: Text[5183]/0#-1 LF=0
20:03:08: Debugging of /Users/jason/Desktop/Projects/Text/bin/Text.app/Contents/MacOS/Text has finished.
我目前正在使用:
这里显示了MRE:
编辑器.cpp
#include "editor.h"
#include "lexerpython3.h"
Editor::Editor(QWidget* parent) : QsciScintilla(parent)
{
LexerPython3 *m_lexerPython3 = new LexerPython3(m_font);
setCallTipsPosition(CallTipsPosition::CallTipsBelowText);
setCallTipsVisible(-1);
setAutoIndent(true);
setAutoCompletionSource(QsciScintilla::AutoCompletionSource::AcsAll);
setAutoCompletionThreshold(1);
setAutoCompletionCaseSensitivity(false);
setAutoCompletionReplaceWord(true);
}
lexerpython3.h
#ifndef LEXERPYTHON3_H
#define LEXERPYTHON3_H
#include <QObject>
#include <QFont>
#include <Qsci/qscilexerpython.h>
class LexerPython3 : public QsciLexerPython
{
Q_OBJECT
public:
LexerPython3(QFont font, QObject* object = nullptr);
const char *keywords(int set) const;
private:
QFont m_font;
const char* key = "and as assert break class continue def del elif else except exec "
"finally for from global if import in is lambda None not or pass "
"print raise return try while with yield";
QString m_calltips;
};
#endif // LEXERPYTHON3_H
lexerpython3.cpp
#include "lexerpython3.h"
#include <QColor>
#include <Qsci/qsciapis.h>
LexerPython3::LexerPython3(QFont font, QObject* parent)
: QsciLexerPython(parent)
{
// Defining variables...
m_font = font;
m_calltips = "ArithmeticError() "
"AssertionError() "
...
...
"__build_class__(func, name, a, *bases, [metaclass], **kwds) "
"__import__(name, globals=None, locals=None, fromlist=(), level=0) "
"all(iterable, /) "
"anext(aiterator[, default]) "
"any(iterable, /)";
setFoldCompact(false);
setFoldQuotes(true);
setFoldComments(true);
setIndentationWarning(QsciLexerPython::IndentationWarning::Inconsistent);
setV2UnicodeAllowed(false);
QsciAPIs api(this);
for (const QString &item1 : QString(key).split(" "))
{
api.add(item1);
}
for (QString item2 : m_calltips.split(" "))
{
api.add(item2);
}
api.prepare();
}
const char* LexerPython3::keywords(int set) const
{
if (set != 1)
return 0;
return key;
}
任何帮助或意见将不胜感激!谢谢!!
哦!我发现我 must 使用 QsciAPI 的指针引用。如果我用过它,我不会崩溃。
QsciAPIs* api;
api = new QsciAPIs(this);