On 7/11/2014 2:38 PM, Alan W. Irwin wrote:
> On 2014-07-03 12:33+0930 Jonathan Woithe wrote:
>
>> Hi all
>>
>> I have a relatively simple Qt program which utilises the PlPlot Qt widget
>> (QtExtWidget).  QtExtWidget is a component of the main application window
>> and as such is constructed during program startup, prior to the
>> calling of
>> QApplication::exec() and before any GUI elements have been made
>> visible with
>> show().  I have noticed that during program startup I will sometimes
>> get the
>> following warnings:
>>
>>  QColor::setRgb: RGB parameters out of range
>>
>> This doesn't appear all the time and seems to be fairly sensitive to
>> timing,
>> making it difficult to debug.  However, after much trial and error I have
>> determined that the warning is triggered from the QtExtWidget
>> constructor.
>> Further exploration showed it was coming from QtPLWidget's constructor
>> (from which QtExtWidget is derived).
>>
>> Looking at the source of QtPLWidget::QtPLWidget() in plqt.cpp, I
>> noticed a
>> call to QApplication::processEvents() which didn't seem right to me.
>> Commenting this out resolves the warning.  Importantly, the warning
>> remains
>> when any of the other Qt functions (such as resize(), QPen()) are
>> commented
>> out.
>>
>> The reason I'm suspicious of this call is that there is no guarantee that
>> any event loop has even been initialised at the time the constructors are
>> called.  Certainly in my case the event loop isn't running because
>> QApplication::exec() has not yet been called at the time of construction.
>> Similarly, the widget tree is not visible at event creation time, so it
>> seems reasonable that some parts of the GUI environment (such as QColor
>> objects) might not have been allocated yet.  At a fundamental level, I
>> expect that the processEvents() call could be triggering a draw of the as
>> yet incompletely constructed widget.  I also recall reading in the
>> past that
>> draw actions cannot be triggered in constructors due to the incomplete
>> nature of the widget being built.
>>
>> Regardless, I can't think of any reason for calling
>> QApplication::processEvents() in the constructor of a Qt widget.  Does
>> anyone know why this call is being made in QtPLWidget's constructor?
>> Based
>> on tests here and the reasons given above I think it should be
>> removed.  The
>> trivial patch to do this is included at the end of this email.
>>
>> What do others think?
>
> I don't understand Qt that well.  However, my own tests with the
> test_interactive target indicate your change is fine so I have
> committed it (revision 13137) with appropriate commentary to the svn
> trunk version (which will end up as our next release).
>
> @Hazen: I thought I better commit this before it got lost.
> However, as our Qt expert feel free to revert this change, if you
> prefer some different solution.

I'm not sure. If it doesn't break anything I guess it is probably ok. It 
looks like this was added by Andrew Ross in commit #10306 for Alban Rochel.

-Hazen


------------------------------------------------------------------------------
Want fast and easy access to all the code in your enterprise? Index and
search up to 200,000 lines of code with a free copy of Black Duck
Code Sight - the same software that powers the world's largest code
search on Ohloh, the Black Duck Open Hub! Try it now.
http://p.sf.net/sfu/bds
_______________________________________________
Plplot-devel mailing list
Plplot-devel@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/plplot-devel

Reply via email to