Приветствую!
...но я не могу понять куда копать.
Проблема такая: и в релизе и в дебаге приложение рушится сразу после
ui->setupUi(this); (сгенерированное qtcreator'ом) в конструкторе MainWindow.
Я както привык доверять Qt, поэтому думаю что сам гдето напортачил...
проект:
QT += sql \
core \
gui
TARGET = x3complex
TEMPLATE = app
CONFIG += qt \
warn_on \
console \
x11 \
windows \
resources
BUILDDIR = build/$$TARGET
DESTDIR = $$BUILDDIR/bin
OBJECTS_DIR = $$BUILDDIR/obj
MOC_DIR = $$BUILDDIR/moc
UI_DIR = $$BUILDDIR/ui
RCC_DIR = $$BUILDDIR/rcc
SOURCES += src/main.cpp \
src/ui/cmainwindow.cpp \
src/csingletone.cpp \
src/capplication.cpp \
src/ui/cdatabaseeditdialog.cpp \
src/db/cdatabase.cpp \
src/db/cmaindatabase.cpp \
src/db/cuserdatabase.cpp \
src/ui/ceditracedialog.cpp \
src/ui/controls/cidtablewidgetitem.cpp \
src/ui/ceditsectordialog.cpp \
src/ui/ceditratingdialog.cpp \
src/ui/ceditwaredialog.cpp \
src/ui/controls/ccolorselect.cpp \
src/ui/controls/ciconselect.cpp \
src/ui/controls/cracetablewidgetitem.cpp
HEADERS += src/ui/cmainwindow.h \
src/st.h \
src/csingletone.h \
src/capplication.h \
src/ui/cdatabaseeditdialog.h \
src/db/cdatabase.h \
src/db/cmaindatabase.h \
src/db/cuserdatabase.h \
src/ui/ceditracedialog.h \
src/ui/controls/cidtablewidgetitem.h \
src/ui/ceditsectordialog.h \
src/ui/ceditratingdialog.h \
src/x3data.h \
src/ui/ceditwaredialog.h \
src/ui/controls/ccolorselect.h \
src/ui/controls/ciconselect.h \
src/ui/controls/cracetablewidgetitem.h
FORMS += src/ui/cmainwindow.ui \
src/ui/cdatabaseeditdialog.ui \
src/ui/ceditracedialog.ui \
src/ui/ceditsectordialog.ui \
src/ui/ceditratingdialog.ui \
src/ui/ceditwaredialog.ui \
src/ui/controls/ccolorselect.ui \
src/ui/controls/ciconselect.ui
TRANSLATIONS += res/ts/x3complex_ru.ts
RESOURCES += res/x3complex.qrc
INCLUDEPATH += src \
src/ui \
src/ui/controls \
src/db
OTHER_FILES += res/style.css
main
int main(int argc, char ** argv)
{
__singletone->initialize(argc, argv);
return __application->run();
}
Макросы синглтона
#include "csingletone.h"
#define __singletone CSingleTone::instance()
#define __application __singletone->application()
#define __mainWindow __singletone->mainWindow()
#define __dbMain __singletone->dbMain()
#define __dbUser __singletone->dbUser()
#define __st_code(_var, _class) if(!_var) { _var = new _class(); } return _var;
кусок синглтона
CSingleTone *CSingleTone::instance()
{
if(_instance) return _instance;
return new CSingleTone();
}
void CSingleTone::initialize(int argc, char ** argv)
{
_application = new CApplication(argc, argv);
}
CApplication * CSingleTone::application()
{
return _application;
}
CMainWindow * CSingleTone::mainWindow() { __st_code(_mainWindow, CMainWindow); }
Кусок capplication
CApplication::CApplication(int argc, char ** argv) : QApplication(argc, argv)
{
setOrganizationName("sheridan");
setOrganizationDomain("http://www.sheridan-home.ru/");
setApplicationName("x3complex");
}
CApplication::~CApplication()
{}
int CApplication::run()
{
__mainWindow->show();
return exec();
}
Кусок mainwindow
CMainWindow::CMainWindow(QWidget *parent) :
QMainWindow(parent),
ui(new Ui::CMainWindow)
{
ui->setupUi(this); // рушится тут
}
Вот что выдает дебаггер
0xb6fdcaf6 mov (%esi),%cs
0xb6fdcaf8 add %eax,(%eax)
0xb6fdcafa add %dh,(%ecx)
0xb6fdcafc (bad)
0xb6fdcafd xor %esi,%esi
0xb6fdcaff mov $0xffffffff,%ebp
0xb6fdcb04 jmp 0xb6fdcb1b <XSetCommand+63>
0xb6fdcb06 xor %eax,%eax
0xb6fdcb08 mov %ebp,%ecx
>>>0xb6fdcb0a repnz scas %es:(%edi),%al
0xb6fdcb0c not %ecx
0xb6fdcb0e add %esi,%ecx
0xb6fdcb10 mov %ecx,%esi
0xb6fdcb12 add $0x1,%edx
0xb6fdcb15 cmp %edx,0x4c(%esp)
0xb6fdcb19 jle 0xb6fdcb38 <XSetCommand+92>
0xb6fdcb1b mov 0x48(%esp),%eax
0xb6fdcb1f mov (%eax,%edx,4),%edi
0xb6fdcb22 test %edi,%edi
0xb6fdcb24 jne 0xb6fdcb06 <XSetCommand+42>
0xb6fdcb26 mov $0x1,%ecx
0xb6fdcb2b add %esi,%ecx
0xb6fdcb2d mov %ecx,%esi
0xb6fdcb2f add $0x1,%edx
0xb6fdcb32 cmp %edx,0x4c(%esp)
0xb6fdcb36 jg 0xb6fdcb1b <XSetCommand+63>
0xb6fdcb38 mov %ecx,0x28(%esp)
0xb6fdcb3c test %ecx,%ecx
0xb6fdcb3e mov $0x1,%eax
0xb6fdcb43 cmove %eax,%ecx
0xb6fdcb46 mov %ecx,(%esp)
0xb6fdcb49 call 0xb6fbd6a4 <malloc@plt>
0xb6fdcb4e mov %eax,0x20(%esp)
0xb6fdcb52 test %eax,%eax
0xb6fdcb54 je 0xb6fdcbfc <XSetCommand+288>
0xb6fdcb5a mov 0x4c(%esp),%edx
0xb6fdcb5e test %edx,%edx
0xb6fdcb60 jle 0xb6fdcbac <XSetCommand+208>
0xb6fdcb62 mov %eax,%ebp
0xb6fdcb64 xor %esi,%esi
0xb6fdcb66 jmp 0xb6fdcb91 <XSetCommand+181>
0xb6fdcb68 mov %eax,0x4(%esp)
0xb6fdcb6c mov %ebp,(%esp)