Сбой QT QsciScintilla

Я использую 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: необходимо построить QApplication до того, как неверный параметр QWidget будет передан функции времени выполнения C.

Также я получаю окно сообщения, в котором говорится: Библиотека времени выполнения Microsoft Visual C++ Это приложение запросило у среды выполнения необычное завершение его работы.
Пожалуйста, свяжитесь со службой поддержки приложения для получения дополнительной информации.

Обновление от 02.04.2014 – 23:17 Я переместил код, чтобы увидеть, что это имеет значение, если я инициализирую его сразу после первой загрузки приложения.

int main(int argc, char *argv[])
{
  QApplication a(argc, argv);
  MainWindow w;
  ..
}

так в MainWindow:

MainWindow::MainWindow(QWidget *parent) :
    QMainWindow(parent),
    ui(new Ui::MainWindow)
{
    ui->setupUi(this);

    ...

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

    ...
}

но он по-прежнему терпит неудачу с теми же проблемами

Обновление от 03.04.2014 – 20:32 Хорошо, кажется, я разобрался. Когда я создаю свой проект как релиз, все работает нормально. Когда я использую сборку своего проекта в качестве отладки, он терпит неудачу. Так что, возможно, мне нужно создать отладочную версию QScintilla.

Любые идеи. Я гуглил, но ничего не нашел.
Спасибо.


person adviner    schedule 03.04.2014    source источник
comment
Итак: что произойдет, если вы сделаете все правильно и сначала создадите QApplication?   -  person ekhumoro    schedule 03.04.2014
comment
На самом деле я сначала создаю QApplication. У него есть древовидный виджет со списком файлов, и когда я его выбираю, я хочу открыть его в редакторе. Поэтому я загружаю список файлов в QTreeWidget, когда я выбираю его, я хочу загрузить файл в QSciScintilla. Приведенный выше код был просто для того, чтобы показать, что происходит сбой при инициализации. Я даже перемещаю код, чтобы посмотреть, что происходит, когда я инициализирую сразу после конструктора MainWindow() и после ui->setupUi(this) и терпит неудачу при попадании в QsciScintilla.   -  person adviner    schedule 03.04.2014
comment
Я обновил свой код, чтобы инициализировать его сразу при первой загрузке приложения, чтобы посмотреть, будет ли это работать. Я отметил в приведенном выше коде обновление от 02.04.2014 — 23:17. Все те же ошибки   -  person adviner    schedule 03.04.2014


Ответы (1)


Обновление от 03.04.2014 – 20: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
person adviner    schedule 03.04.2014