[Interest] Qt/iOS subclassing and/or delegating

maitai maitai at virtual-winds.org
Fri May 29 15:25:05 CEST 2015


 

I tried but didn't succeed. If I understand well (which is far from
being certain), I can only add new methods or properties that way, not
override existing ones unless a protocol is defined that would allow me
to create a delegate on QIOViewController, but there is no as far as I
can see. 

I might be wrong, though. I even hope so. 

Le 29-05-2015 15:18, Ben Lau a écrit : 

> Why don't use categories that suggested by people here? 
> 
> On 29 May 2015 at 21:11, maitai <maitai at virtual-winds.org> wrote:
> 
>> Finally got it working... with a bad hack
>> 
>> I cloned QIOSViewController.h and .mm from qt sources (and added qt's
>> iOS headers in my include path, I already had core-private and
>> gui-private in my pro files) and modified it to do what I want. I also
>> had to add a lockedOrientation property to it for some mysterious
>> reason...
>> 
>> At least it's doing what I need (i.e. ignore device rotation when I
>> decide to). Of course it's a really bad hack and I'm still hoping
>> someone can point me to a better solution.
>> 
>> Thanks
>> Philippe.
>> 
>> Le 29-05-2015 11:24, maitai a écrit :
>>> I had a look at QT sources... Basically what I want to do is override
>>> QIOSViewController:shouldAutorotate.
>>> 
>>> I tried
>>> @interface MyIOSViewController : QIOSViewController
>>> @end
>>> @implementation MyIOSViewController
>>> - (BOOL) shouldAutorotate {
>>> NSLog(@"Inside shouldAutorotate");
>>> return NO;
>>> }
>>> 
>>> It compiles and does not crash (I import QIOSViewController.h), but
>>> that
>>> all it does...
>>> 
>>> 
>>> Le 29-05-2015 10:23, Harri Pasanen a écrit :
>>>> Compared to C++, Objective-C is very dynamic language and you can do
>>>> many things at runtime.
>>>> 
>>>> So you can add methods to existing classes using categories:
>>>> https://developer.apple.com/library/ios/documentation/Cocoa/Conceptual/ProgrammingWithObjectiveC/CustomizingExistingClasses/CustomizingExistingClasses.html [1]
>>>> 
>>>> Or resort to something quite funky to replace existing methods:
>>>> https://github.com/rentzsch/jrswizzle [2]
>>>> 
>>>> As to your original question, rotation handling is surprisingly tricky
>>>> even in pure Objective-C if you want to conditionally rotate. For
>>>> instance iOS 8.3 broke some of my code handling that which had worked
>>>> fine since iOS 6, pure Objective-C.
>>>> 
>>>> I don't know how Qt hooks into it.
>>>> 
>>>> Harri
>>>> 
>>>> On 29/05/2015 09:41, Robert Iakobashvili wrote:
>>>>> On Fri, May 29, 2015 at 8:38 AM, maitai <maitai at virtual-winds.org>
>>>>> wrote:
>>>>>> Thanks Ben for your reply
>>>>>> 
>>>>>> After much digging I made some progress but I am still looking for a
>>>>>> way to
>>>>>> temporary lock screen auto rotation.
>>>>>> 
>>>>>> I have created my own app delegate to catch openUrl(), and
>>>>>> surprisingly it
>>>>>> works. I register my app delegate from main.cpp by calling something
>>>>>> like
>>>>>> this:
>>>>>> 
>>>>>> void QtAppDelegateInitialize ()
>>>>>> 
>>>>>> {
>>>>>> 
>>>>>> QtAppDelegate *appDelegate = (QtAppDelegate *)[[UIApplication
>>>>>> sharedApplication] delegate];
>>>>>> 
>>>>>> [[UIApplication sharedApplication] setDelegate:[QtAppDelegate
>>>>>> sharedQtAppDelegate]];
>>>>>> 
>>>>>> NSLog(@"Created a new appdelegate");
>>>>>> 
>>>>>> }
>>>>>> 
>>>>>> 
>>>>>> 
>>>>>> I then found this very interesting post:
>>>>>> https://forum.qt.io/topic/48745/how-to-get-didfinishlaunchingwithoptions-called-in-ios-delegate/7 [3]
>>>>>> which links to this bug report: QTBUG-38184.
>>>>>> 
>>>>>> First question: I am now wondering how my delegate can possibly work
>>>>>> since
>>>>>> it seems I can have only one delegate... so what happened to
>>>>>> QIOSApplicationDelegate?
>>>>>> 
>>>>>> I then tried various things to add yet another delegate this time
>>>>>> based on
>>>>>> UINavigationControllerDelegate, but although after much sweat it
>>>>>> seems to
>>>>>> load, the various methods I am trying to override are never called
>>>>>> when I
>>>>>> rotate the device.
>>>>>> 
>>>>>> Could it be that I should instead modify/interface
>>>>>> QIOSApplicationDelegate
>>>>>> itself and not try to create my own delegates?
>>>>>> 
>>>>>> A bit confused at this point, I admit ;)
>>>>>> 
>>>>>> Thanks for any tip
>>>>>> 
>>>>>> Philippe Lelong
>>>>>> 
>>>>>> 
>>>>>> 
>>>>>> Le 27-05-2015 20 [4]:24, Ben Lau a écrit :
>>>>>> 
>>>>>> 
>>>>>> 
>>>>>> On 28 May 2015 at 02:07, maitai <maitai at virtual-winds.org> wrote:
>>>>>>> Hello all,
>>>>>>> 
>>>>>>> I've started to port on iOS and need to override some methods, like
>>>>>>> we
>>>>>>> do easily through Java on Qt/Android. I succeeded to implement an
>>>>>>> appDelegate in objective-C that works for some events like openURL
>>>>>>> and
>>>>>>> such, but for instance I also need to lock automatic screen
>>>>>>> rotation
>>>>>>> in
>>>>>>> some circumstances (but not always).
>>>>>> 
>>>>>> Objective-C has a feature to replace the original method of a class.
>>>>>> So you
>>>>>> may just override the method you needed (In case it don't break Qt)
>>>>>> Customizing Existing Classes
>>>>>> 
>>>>>> Example Code:
>>>>>> quickios/appdelegate.mm [5] at 0b067e17dc13b8533ca3f7dd574d7e81ea17a015
>>>>>> ·
>>>>>> benlau/quickios
>>>>>> 
>>>>>> I have tested to override openURL and didFinishLaunchingWithOptions
>>>>>> of
>>>>>> AppDelegate with Qt 5.4.1. This method works.
>>>>>> 
>>>>>>> I read that I should somehow override "bool
>>>>>>> UINavigationController::shouldRotate()"
>>>>>> 
>>>>>> Never tried. But should be worth to try? I am also be interested
>>>>>> with
>>>>>> your
>>>>>> result.
>>>>>> 
>>>>>>> Should I reimp (subclass?) UINavigationController and how? Or is
>>>>>>> there a
>>>>>>> way to create a new delegate or even better to extend my current
>>>>>>> appDelegate?
>>>>>>> 
>>>>>>> 
>>>>>>> I'm new to Objective-C as you can guess... Any clue would be really
>>>>>>> appreciated :)
>>>>>>> 
>>>>>>> Thanks
>>>>>>> Philippe Lelong
>>>>> Dear Philippe,
>>>>> 
>>>>> Please see the reply Tor Arne inside
>>>>> 
>>>>> https://bugreports.qt.io/browse/QTBUG-42123 [6]
>>>>> 
>>>>> That could be an answer - Let it be.
>>>>> 
>>>>> Sincerely,
>>>>> Robert
>>>>> _______________________________________________
>>>>> Interest mailing list
>>>>> Interest at qt-project.org
>>>>> http://lists.qt-project.org/mailman/listinfo/interest [7]
>>>> 
>>>> _______________________________________________
>>>> Interest mailing list
>>>> Interest at qt-project.org
>>>> http://lists.qt-project.org/mailman/listinfo/interest [7]
>>> _______________________________________________
>>> Interest mailing list
>>> Interest at qt-project.org
>>> http://lists.qt-project.org/mailman/listinfo/interest [7]
>> _______________________________________________
>> Interest mailing list
>> Interest at qt-project.org
>> http://lists.qt-project.org/mailman/listinfo/interest [7]
 

Links:
------
[1]
https://developer.apple.com/library/ios/documentation/Cocoa/Conceptual/ProgrammingWithObjectiveC/CustomizingExistingClasses/CustomizingExistingClasses.html
[2] https://github.com/rentzsch/jrswizzle
[3]
https://forum.qt.io/topic/48745/how-to-get-didfinishlaunchingwithoptions-called-in-ios-delegate/7
[4] tel:27-05-2015%2020
[5] http://appdelegate.mm
[6] https://bugreports.qt.io/browse/QTBUG-42123
[7] http://lists.qt-project.org/mailman/listinfo/interest
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.qt-project.org/pipermail/interest/attachments/20150529/72bd6604/attachment.html>


More information about the Interest mailing list