In the Qt Connectivity Android java code is a function that supports setting the MTU - this code seems a bit strange in that it will successfully exchange and get the maximum MTU (which in my case is 240), however this information is not relayed back to the C++ Qt code so the only safe amount of data to write in a characteristic is 20. If the MTU is 23 then no more than 20 bytes can be successfully written with a single command otherwise a characteristic write error is emitted, however if the MTU exchange is set at 240 and 60 bytes is written with a single command then it splits this up into multiple packets with a length no greater than 27 bytes per packet. Testing with a non-Qt non-android device yields writes of >240 bytes per packet without issue.
Therefore I see 2 issues:
1) C++ Qt Android (and probably other systems too) code is not able to know the result of a MTU exchange
2) Even when a successful MTU exchange has occured on C++ Qt Android, when atempting to write data of e.g. 60 bytes, it is split up into packets of no greater than 27 bytes per packet.