[Qt-interest] QWidget: Must construct a QApplication before a QPaintDevice

Andre Somers andre at familiesomers.nl
Tue Sep 1 09:40:39 CEST 2009


Andreas Pakulat wrote:
> On 31.08.09 17:22:36, Andre Somers wrote:
>   
>> Hi,
>>
>> I am experiencing a weird problem. When I compile my program with the 
>> release flag, I get the above error if I run it through the debugger. If 
>> I run it directly, it aborts with a code 3. However, when I compile a 
>> debug version of my program, the problem does not occur.
>>
>> The problem is weird anyway, because in my main function, the first 
>> thing I do is construct a QApplication. Here is my main function:
>>     
>
> main() is not necessarily the "first" thing, static objects are created
> before main, so you should check your code for any widgets created as
> static objects. Or other "global" variables you create on the stack in
> some .cpp file.
>
> Andreas
>
>   
Thank you for your input.

My application does not use static objects. That is, there are a few 
static pointers (for use in singleton classes), but that's it. These 
singletons are not instantiated before the QApplication. What's more, I 
only see this crash at a point where a window is initialized. I have 
succesfully loaded some plugins, and only then the crash happens. But 
this plugin loading only happens *after* a QApplication instance has 
been constructed!

So, I am seeing this issue at a moment that I am sure a QApplication has 
already been constructred.


Brad Howes wrote:
> What compiler/OS are you running on? In my experience, crashes that  
> occur in an optimized build (I assume that is what you mean by  
> 'release') vs. a debug build happen due to uninitialized memory or  
> invalid parameter count -- a quite common one in my C days was printf 
> () bugs. For C++, a couple of things come to mind: uninitialized POD  
> members, invalid assumptions on object lifetimes, race condition.
>   
First of all,  good point Brad, I forgot to mention my platform. I am 
working on Windows XP using MinGW32.
What I mean by debug and release, is simply setting the these flags in 
QtCreator. I am not manually adjusting any optimization flags. The point 
was the specific message that is printed to my console: "QWidget: Must 
construct a QApplication before a QPaintDevice". I really don't get how 
that can occur, as a QApplication //has// been constructed, and I 
verified that by printing a message with 
QApplication::applicationDirPath() (using my app variable) and the 
sessionId to the console using qDebug(). This message appears neatly in 
the output where I would expect it: right at the top of my output.

I would really appreciate any more pointers, especially on how I can 
debug a case like this that only appears in release mode. I now feel 
like I am stumbeling around in the dark...

Thanks!

André


-------------- next part --------------
An HTML attachment was scrubbed...
URL: http://lists.qt-project.org/pipermail/qt-interest-old/attachments/20090901/6f89e907/attachment.html 


More information about the Qt-interest-old mailing list