[C++-sig] Can boost.python and PyQt be used together?
David Abrahams
dave at boost-consulting.com
Mon Dec 9 01:31:53 CET 2002
"Paul F. Kunz" <Paul_Kunz at SLAC.Stanford.EDU> writes:
>>>>>> On Sun, 08 Dec 2002 18:04:37 -0500, David Abrahams <dave at boost-consulting.com> said:
>
>> Err, Paul: when I suggested that you use return_internal_reference<>
>> for your newCanvas call, I didn't mean that you should blindly
>> substitute it for reference_existing_object everywhere!
>
> Sorry.
>
>> You probably shouldn't be using call policies until you understand
>> what these things do. What is unclear when you RTFM? I mean, in
>> particular, the 3 sections starting here:
>> http://www.boost.org/libs/python/doc/v2/reference.html#models_of_call_policies
>
> Upon reading them again, I'm not sure. But...
>
> - the example for `return_internal_reference' looked like my case, but
> now I realize it is for a member function not a global function.
> My mistake.
Did you read
http://www.boost.org/libs/python/doc/v2/return_internal_reference.html#introduction
or did you just look at the example usage?
>
> - The example for `reference_existing_object' seems to be in error.
> it is not a template argument for `return_value_policy'.
Yes, that's been fixed in CVS for quite some time:
http://cvs.sourceforge.net/cgi-bin/viewcvs.cgi/*checkout*/boost/boost/libs/python/doc/v2/reference_existing_object.html#examples
> Ok, so now I have...
>
> def ( "WCFactory", WCFactory,
> return_value_policy < reference_existing_object > () );
>
> class_ <WindowController> ( "WindowController" )
> .def ( "newCanvas",
> ( CanvasWindow * ( WindowController::* ) // function pointer
> (void) ) // arguments
> &WindowController::newCanvas,
> return_internal_reference <> () )
> ;
>
> So if I understand it, the *this, ie the WindowController object owns
> the returned CanvasWindow, which is what I want.
Actually, the returned CanvasWindow Python object owns the
WindowController, which is what you want ;-)
It's a little counterintuitive, but that's correct.
> I think the problem is not in Boost.Python incompatiblity, but in
> my code. I think my Window is trying to do something before the Qt
> application object is running. I'll have write some more code to
> test that.
>
> Thanks again for all your help, David and Phil.
My pleasure.
--
David Abrahams
dave at boost-consulting.com * http://www.boost-consulting.com
Boost support, enhancements, training, and commercial distribution
More information about the Cplusplus-sig
mailing list