Толи я не умею пользоваться таск-трекером троллей, толи он глючит. Создал баг-репорт, а номер ему не присвоился и через поиск он не находится. В общем пришел поплакаться к вам, не могу в себе держать
Проблема в следующем. Какую бы я версию QtCreator'a не качал она всегда крашится (Access Violation по нулевому адресу) на моем рабочем компьютере. Он крашился со 100% гарантией при попытке создать новый проект консольного приложения.
Причем баг было сложно найти поначалу, т.к. gdb не выдавал адрес где это происходило. Воспользовался ollydbg вместо gdb и нашел место в QtGui4.dll:
ASM
65385D5F E8 7CEBD5FF CALL QtGui4.??0QPainter@@QAE@PAVQPaintDevice@@@Z
65385D64 C74424 38 000000>MOV DWORD PTR SS:[ESP+38],0
65385D6C 8B43 10 MOV EAX,DWORD PTR DS:[EBX+10]
65385D6F 8B70 1C MOV ESI,DWORD PTR DS:[EAX+1C]
65385D72 8B78 18 MOV EDI,DWORD PTR DS:[EAX+18]
65385D75 2B70 14 SUB ESI,DWORD PTR DS:[EAX+14]
65385D78 2B78 10 SUB EDI,DWORD PTR DS:[EAX+10]
65385D7B 68 3C4A5A65 PUSH QtGui4.655A4A3C ; UNICODE "Navigation"
65385D80 6A 00 PUSH 0
65385D82 46 INC ESI
65385D83 47 INC EDI
65385D84 FF15 0CBF6D65 CALL DWORD PTR DS:[656DBF0C]
Вызов на последней строке приводил к AV, т.к. по адресу DS:[656DBF0C] был 0.
Начал искать где в исходниках есть строка "Navigation" и наткнулся на qwizard_win.cpp. Т.е. это относится к классу QWizard и, я так понимаю, именно он используется при выборе создания нового проекта в QtCreator'e. Нашел очень похожие строки:
C++ (Qt)
void QVistaBackButton::paintEvent(QPaintEvent *)
{
QPainter p(this);
QRect r = rect();
HANDLE theme = pOpenThemeData(0, L"Navigation");
//RECT rect;
RECT clipRect;
int xoffset = QWidget::mapToParent(r.topLeft()).x();
int yoffset = QWidget::mapToParent(r.topLeft()).y();
clipRect.top = r.top() + yoffset;
clipRect.bottom = r.bottom() + yoffset;
clipRect.left = r.left() + xoffset;
clipRect.right = r.right() + xoffset;
int state = WIZ_NAV_BB_NORMAL;
if (!isEnabled())
state = WIZ_NAV_BB_DISABLED;
else if (isDown())
state = WIZ_NAV_BB_PRESSED;
else if (underMouse())
state = WIZ_NAV_BB_HOT;
pDrawThemeBackground(theme, p.paintEngine()->getDC(), WIZ_NAV_BACKBUTTON, state, &clipRect, &clipRect);
}
В этом файле вообще все методы Vist'овские.
Теперь вопрос. Какого хрена то Vista на Windows2000?