ASSERT/DEBUG Fehler in qwininputcontext_win.cpp

Alles rund um die Programmierung mit Qt
Antworten
veeman
Beiträge: 280
Registriert: 3. Oktober 2012 01:43
Kontaktdaten:

ASSERT/DEBUG Fehler in qwininputcontext_win.cpp

Beitrag von veeman »

Hallo Leute,

hab momentan ein verwirrendes Problem und weiß nicht ob ich es einfach ignorieren kann.

Ich kriege bei meinem aktuellen Windows-Projekt (Screensaver) nur im Debug-Modus immer die folgende Fehlermeldung:

Code: Alles auswählen

Debug Error!

...
Module: 4.8.0
File: global\qglobal.cpp
Line: 2232

ASSERT: "w->testAttribute(Qt::WA_WState_Created)" in file 
inputmethod\qwininputcontext_win.cpp, line 377

(Press Retry to debug the application)
Wenn ich ignorieren klicke läuft das Programm ohne Probleme weiter.
Im Release kommt der Fehler logischerweise gar nicht, da die ASSERTS entfernt werden, und das Programm läuft problemlos.

Ich hab im Internet nur das hier gefunden, wo sie darauf schlissen das es einfach ein BUG in Qt ist.

Und zu guter letzt ein wenig Code wo der Fehler auftritt, zu beachten ist das kein QApplication::exec aufgerufen wird, da die Events von einem anderen Bibliothek abgearbeitet werden (scrnsave.lib).
Vielleicht liegt auch da schon das Problem.

Code: Alles auswählen

...
BOOL WINAPI RegisterDialogClasses(HANDLE hInst)
{
	...
	(new QApplication(argc, argv))->setAttribute(Qt::AA_NativeWindows ,true);
	...
	return TRUE;
}

BOOL WINAPI ScreenSaverConfigureDialog(HWND hDlg, UINT message, WPARAM wParam, LPARAM lParam)
{
  switch(message)
  { 
	 case WM_INITDIALOG:
		{
			QScreenSaverConfigWidget *config = createCustomScreenSaverConfig();
			...
			SetParent(config->winId(), hDlg);
			DWORD style = GetWindowLong(config->winId(), GWL_STYLE);
			style = style & ~(WS_POPUP) | WS_CHILD;
			SetWindowLong(config->winId(), GWL_STYLE, style);
			config->show();                                                                 // <- hier Tritt der Fehler auf
		}
		return TRUE;
		...
		case WM_DESTROY:
			delete QScreenSaverConfigWidget::instance();
			delete QApplication::instance();
		return TRUE;
  }

  return FALSE;
}
Kann mir vl. einer nen Tipp geben wie man das ggf. eleganter Lösen kann.

Mfg veeman
Antworten