QT QsciScintilla 崩溃

Posted

技术标签:

【中文标题】QT QsciScintilla 崩溃【英文标题】:QT QsciScintilla crash 【发布时间】:2014-04-03 04:39:45 【问题描述】:

我正在使用 QScintilla 2.8。 我已经正确构建了 qscintilla2.dll。 我把它放在我的 c:\Qt\Qt5.2.1\mingw48_32\bin 文件夹中

我的路径是 Qt 设置的设置:

C:\Qt\Qt5.2.1\5.2.1\mingw48_32\lib;
C:\Qt\Qt5.2.1\5.2.1\mingw48_32\bin;
C:\Qt\Qt5.2.1\Tools\mingw48_32\bin;

在我的项目中,我将以下内容放入我的 .pro 文件中: LIBS += -lqscintilla2

在我的代码中:

#include <Qsci/qsciscintilla.h>
#include <Qsci/qscilexerhtml.h>
#include <Qsci/qscilexerjavascript.h>
#include <Qsci/qscilexerxml.h>
#include <Qsci/qscilexercss.h>
#include <Qsci/qscilexersql.h>
#include <Qsci/qscilexeryaml.h>

...
QsciScintilla *editor = new QsciScintilla();

程序编译良好。但是当我运行程序时它会在我跨步时崩溃:

QsciScintilla *editor = new QsciScintilla();

我看到的错误在应用程序输出中: QWidget:必须在 QWidget 之前构造一个 QApplication 传递给 C 运行时函数的参数无效。

我还收到一个消息框,上面写着: Microsoft Visual C++ 运行时库 此应用程序已请求运行时以不寻常的方式终止它。 请联系应用程序的支持团队了解更多信息。

2014 年 4 月 2 日更新 - 晚上 11:17 我移动代码只是为了看看如果我在应用程序首次加载后立即初始化它会有所不同

int main(int argc, char *argv[])

  QApplication a(argc, argv);
  MainWindow w;
  ..

所以在主窗口中:

MainWindow::MainWindow(QWidget *parent) :
    QMainWindow(parent),
    ui(new Ui::MainWindow)

    ui->setupUi(this);

    ...

    QsciScintilla *editor = new QsciScintilla();
    setCentralWidget(editor);

    ...

但它仍然因同样的问题而失败

2014 年 4 月 3 日更新 - 晚上 8:32 好的,我想我明白了。当我将项目构建为发布时,一切正常。当我将我的项目构建为调试时,它失败了。所以也许我需要构建一个 QScintilla 的调试版本

任何想法。我用谷歌搜索过,但没有任何结果。 谢谢

【问题讨论】:

那么:如果你做正确的事情并首先创建一个 QApplication 会发生什么? 我实际上确实首先创建了一个 QApplication。它有一个带有文件列表的treewidget,当我选择它时,我想在编辑器中打开它。因此,当我选择 QTreeWidget 时,我会在 QTreeWidget 上加载文件列表,我想将文件加载到 QSciScintilla。上面的代码只是为了表明它在初始化时崩溃。我什至移动代码以查看当我在 MainWindow() 构造函数之后和 ui->setupUi(this) 之后初始化并在 QsciScintilla 被命中时失败 我更新了我的代码,以便在应用程序第一次加载时对其进行初始化,看看是否可行。我在上面的代码中注意到更新 4/2/2014 - 11:17 PM。还是一样的错误 【参考方案1】:

2014 年 4 月 3 日更新 - 晚上 8:32 我的解决方案是构建库的调试版本,一切都很好。我使用了以下步骤:

qmake qscintilla.pro
mingw32-make -f Makefile.Debug
mingw32-make -f Makefile.Debug install

注意:确保将 qscintilla2.dll 复制到所有库所在的 bin 目录。在我的例子中:

From:
C:\Qt\Qt5.2.1\5.2.1\mingw48_32\lib

To:
C:\Qt\Qt5.2.1\5.2.1\mingw48_32\bin

【讨论】:

以上是关于QT QsciScintilla 崩溃的主要内容,如果未能解决你的问题,请参考以下文章

QsciScintilla 中的 QSyntaxHighlighter 的 setCurrentBlockState 是不是有任何等价物?

在 PyQt5 中将 QsciScintilla 的文本光标向左或向右移动

Pyqt4 上的 QsciScintilla 用于 python35 错误(非官方 whl)

为啥 ChangeWindowMessageFilter 会导致 Qt 崩溃?

Qt - 设置 PYTHONPATH 后 CDB 崩溃

我的 Qt 项目中的 gdb 崩溃