Probably QT “Fusion” is not an appropriate style for Android apps, because its buttons height is not enough:

Probably QT “Fusion” is not an appropriate style for Android apps, because its buttons height is not enough:
For example, there is the following content in qt-everywhere-src-6.4.1\qttranslations\translations\linguist_ru.ts
:
<message numerus="yes">
<source>Dropped %n message(s) which had no ID.</source>
<translation>
<numerusform>Удалено %n сообщение, у которого не было ID.</numerusform>
<numerusform>Удалено %n сообщения, у которых не было ID.</numerusform>
<numerusform>Удалено %n сообщений, у которых не было ID.</numerusform>
</translation>
</message>
Build QT6.4.1 for Windows and then build it for Android as follows:
set MY_DRIVE=D:
cd %MY_DRIVE%\dev\build\qta
%MY_DRIVE%
set "CMAKE_ROOT=%MY_DRIVE%\dev\tools\cmake-3.24.2-windows-x86_64\bin"
set "NINJA_ROOT=%MY_DRIVE%\dev\tools\ninja-win"
set "PERL_ROOT=%MY_DRIVE%\dev\tools\Strawberry\perl\bin"
set "MINGW_ROOT=%MY_DRIVE%\dev\tools\x86_64-12.2.0-release-win32-seh-rt_v10-rev0\mingw64\bin"
set "PYTHON_ROOT=%MY_DRIVE%\dev\tools\Python35"
set "JDK_ROOT=C:\Program Files\Android\Android Studio\jre\bin"
set PATH=C:\WINDOWS\system32;C:\WINDOWS
set PATH=%CMAKE_ROOT%;%PATH%
set PATH=%NINJA_ROOT%;%PATH%
set PATH=%MINGW_ROOT%;%PATH%
set PATH=%PERL_ROOT%;%PATH%
set PATH=%PYTHON_ROOT%;%PATH%
set PATH=%JDK_ROOT%;%PATH%
Extract QT sources:
cd /d/dev/repos
tar -xf ../distrib/qt-everywhere-src-6.4.1.tar.xz
Configure QT as follows:
"C:\Program Files\Microsoft Visual Studio\2022\Professional\VC\Auxiliary\Build\vcvarsall.bat" amd64
set MY_DRIVE=D:
%MY_DRIVE%
cd %MY_DRIVE%\dev\build\qt
set "CMAKE_ROOT=%MY_DRIVE%\dev\tools\cmake-3.24.2-windows-x86_64\bin"
set "NINJA_ROOT=%MY_DRIVE%\dev\tools\ninja-win"
set "PERL_ROOT=%MY_DRIVE%\dev\tools\Strawberry\perl\bin"
set PATH=%CMAKE_ROOT%;%PATH%
set PATH=%NINJA_ROOT%;%PATH%
set PATH=%PERL_ROOT%;%PATH%
set PATH=%MY_DRIVE%\dev\tools\Python35;%PATH%
Found the following code in qt-everywhere-src-6.4.0\qtbase\src\plugins\platforms\android\qandroidplatformtheme.cpp
:
QString QAndroidPlatformTheme::standardButtonText(int button) const
{
switch (button) {
case QPlatformDialogHelper::Yes:
return QCoreApplication::translate("QAndroidPlatformTheme", "Yes");
case QPlatformDialogHelper::YesToAll:
return QCoreApplication::translate("QAndroidPlatformTheme", "Yes to All");
case QPlatformDialogHelper::No:
return QCoreApplication::translate("QAndroidPlatformTheme", "No");
case QPlatformDialogHelper::NoToAll:
return QCoreApplication::translate("QAndroidPlatformTheme", "No to All");
}
return QPlatformTheme::standardButtonText(button);
}
We can’t do this in QT:
class Global
{
public:
~Global()
{
qDebug() << "Global destructor.";
}
};
Global g;
There was qtquickcontrols2.conf
in the root directory of my app sources with the following content:
; This file can be edited to change the style of the application
; See Styling Qt Quick Controls 2 in the documentation for details:
; https://doc.qt.io/qt-6/qtquickcontrols2-styles.html
[Controls]
;Style=Default
;Style=Universal
;Style=Material
Style=Fusion
;Style=iOS
[Universal]
Theme=Light
Accent=Steel
[Material]
;Theme=Light
Theme=Dark
;Accent=BlueGrey
;Primary=BlueGray
After several hours of playing sounds my iOS app crashes and the QT Creator displays the following stack trace:
1 caulk::thread::join() (x86_64) /Applications/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/Library/Developer/CoreSimulator/Profiles/Runtimes/iOS.simruntime/Contents/Resources/RuntimeRoot/System/Library/PrivateFrameworks/caulk.framework/caulk 0x7fff49a06293
2 std::__shared_ptr_emplace<AURemoteIO::IOThread, std::allocator<AURemoteIO::IOThread>>::__on_zero_shared() (x86_64) /Applications/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/Library/Developer/CoreSimulator/Profiles/Runtimes/iOS.simruntime/Contents/Resources/RuntimeRoot/System/Library/Frameworks/AudioToolbox.framework/libEmbeddedSystemAUs.dylib 0x7fff438a7469
3 AURemoteIO::Stop() (x86_64) /Applications/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/Library/Developer/CoreSimulator/Profiles/Runtimes/iOS.simruntime/Contents/Resources/RuntimeRoot/System/Library/Frameworks/AudioToolbox.framework/libEmbeddedSystemAUs.dylib 0x7fff438a58d3
4 ausdk::AUMethodStop(void *) (x86_64) /Applications/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/Library/Developer/CoreSimulator/Profiles/Runtimes/iOS.simruntime/Contents/Resources/RuntimeRoot/System/Library/Frameworks/AudioToolbox.framework/libEmbeddedSystemAUs.dylib 0x7fff438f3529
5 QDarwinAudioSink::audioDeviceStop() qdarwinaudiosink.mm 619 0x10ffa7afd
6 QDarwinAudioSink::audioDeviceIdle() qdarwinaudiosink.mm 629 0x10ffa7b68
7 QDarwinAudioSink::renderCallback(void *, unsigned int *, AudioTimeStamp const *, unsigned int, unsigned int, AudioBufferList *) qdarwinaudiosink.mm 446 0x10ffa7ab7
8 ausdk::AUInputElement::PullInput(unsigned int&, AudioTimeStamp const&, unsigned int, unsigned int) (x86_64) /Applications/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/Library/Developer/CoreSimulator/Profiles/Runtimes/iOS.simruntime/Contents/Resources/RuntimeRoot/System/Library/Frameworks/AudioToolbox.framework/libEmbeddedSystemAUs.dylib 0x7fff438f12d2
9 AUInputFormatConverter2::InputProc(OpaqueAudioConverter *, unsigned int *, AudioBufferList *, AudioStreamPacketDescription * *, void *) (x86_64) /Applications/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/Library/Developer/CoreSimulator/Profiles/Runtimes/iOS.simruntime/Contents/Resources/RuntimeRoot/System/Library/Frameworks/AudioToolbox.framework/libEmbeddedSystemAUs.dylib 0x7fff4382cf27
10 acv1::AudioConverterChain::CallInputProc(unsigned int) (x86_64) /Applications/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/Library/Developer/CoreSimulator/Profiles/Runtimes/iOS.simruntime/Contents/Resources/RuntimeRoot/System/Library/PrivateFrameworks/AudioToolboxCore.framework/AudioToolboxCore 0x7fff30323840
11 acv1::AudioConverterChain::FillBufferFromInputProc(unsigned int *, CADeprecated::CABufferList *) (x86_64) /Applications/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/Library/Developer/CoreSimulator/Profiles/Runtimes/iOS.simruntime/Contents/Resources/RuntimeRoot/System/Library/PrivateFrameworks/AudioToolboxCore.framework/AudioToolboxCore 0x7fff3032467f
12 acv1::BufferedAudioConverter::GetInputBytes(unsigned int, unsigned int&, CADeprecated::CABufferList const *&) (x86_64) /Applications/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/Library/Developer/CoreSimulator/Profiles/Runtimes/iOS.simruntime/Contents/Resources/RuntimeRoot/System/Library/PrivateFrameworks/AudioToolboxCore.framework/AudioToolboxCore 0x7fff3045c7bd
13 acv1::CBRConverter::RenderOutput(CADeprecated::CABufferList *, unsigned int, unsigned int&, AudioStreamPacketDescription *) (x86_64) /Applications/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/Library/Developer/CoreSimulator/Profiles/Runtimes/iOS.simruntime/Contents/Resources/RuntimeRoot/System/Library/PrivateFrameworks/AudioToolboxCore.framework/AudioToolboxCore 0x7fff303091bc
14 acv1::BufferedAudioConverter::FillBuffer(unsigned int&, AudioBufferList&, AudioStreamPacketDescription *) (x86_64) /Applications/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/Library/Developer/CoreSimulator/Profiles/Runtimes/iOS.simruntime/Contents/Resources/RuntimeRoot/System/Library/PrivateFrameworks/AudioToolboxCore.framework/AudioToolboxCore 0x7fff3045c589
15 acv1::AudioConverterChain::RenderOutput(CADeprecated::CABufferList *, unsigned int, unsigned int&, AudioStreamPacketDescription *) (x86_64) /Applications/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/Library/Developer/CoreSimulator/Profiles/Runtimes/iOS.simruntime/Contents/Resources/RuntimeRoot/System/Library/PrivateFrameworks/AudioToolboxCore.framework/AudioToolboxCore 0x7fff303235bb
16 acv1::BufferedAudioConverter::FillBuffer(unsigned int&, AudioBufferList&, AudioStreamPacketDescription *) (x86_64) /Applications/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/Library/Developer/CoreSimulator/Profiles/Runtimes/iOS.simruntime/Contents/Resources/RuntimeRoot/System/Library/PrivateFrameworks/AudioToolboxCore.framework/AudioToolboxCore 0x7fff3045c589
17 acv1::_AudioConverterFillComplexBuffer(OpaqueAudioConverter *, int ( *)(OpaqueAudioConverter *, unsigned int *, AudioBufferList *, AudioStreamPacketDescription * *, void *), void *, unsigned int *, AudioBufferList *, AudioStreamPacketDescription *, AudioStreamPacketDependencyInfo *) (x86_64) /Applications/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/Library/Developer/CoreSimulator/Profiles/Runtimes/iOS.simruntime/Contents/Resources/RuntimeRoot/System/Library/PrivateFrameworks/AudioToolboxCore.framework/AudioToolboxCore 0x7fff30491df6
18 AudioConverterFillComplexBuffer (x86_64) /Applications/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/Library/Developer/CoreSimulator/Profiles/Runtimes/iOS.simruntime/Contents/Resources/RuntimeRoot/System/Library/PrivateFrameworks/AudioToolboxCore.framework/AudioToolboxCore 0x7fff303a3680
19 AUConverterBase::RenderBus(unsigned int&, AudioTimeStamp const&, unsigned int, unsigned int) (x86_64) /Applications/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/Library/Developer/CoreSimulator/Profiles/Runtimes/iOS.simruntime/Contents/Resources/RuntimeRoot/System/Library/Frameworks/AudioToolbox.framework/libEmbeddedSystemAUs.dylib 0x7fff4382b617
20 AURemoteIO::RenderBus(unsigned int&, AudioTimeStamp const&, unsigned int, unsigned int) (x86_64) /Applications/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/Library/Developer/CoreSimulator/Profiles/Runtimes/iOS.simruntime/Contents/Resources/RuntimeRoot/System/Library/Frameworks/AudioToolbox.framework/libEmbeddedSystemAUs.dylib 0x7fff438a4317
21 ausdk::AUBase::DoRender(unsigned int&, AudioTimeStamp const&, unsigned int, unsigned int, AudioBufferList&) (x86_64) /Applications/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/Library/Developer/CoreSimulator/Profiles/Runtimes/iOS.simruntime/Contents/Resources/RuntimeRoot/System/Library/Frameworks/AudioToolbox.framework/libEmbeddedSystemAUs.dylib 0x7fff438f06a9
22 AURemoteIO::PerformIO(unsigned int, unsigned int, unsigned int, AudioTimeStamp const&, AudioTimeStamp const&, AudioBufferList const *, AudioBufferList *, unsigned int&) (x86_64) /Applications/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/Library/Developer/CoreSimulator/Profiles/Runtimes/iOS.simruntime/Contents/Resources/RuntimeRoot/System/Library/Frameworks/AudioToolbox.framework/libEmbeddedSystemAUs.dylib 0x7fff438af7df
23 _XPerformIO (x86_64) /Applications/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/Library/Developer/CoreSimulator/Profiles/Runtimes/iOS.simruntime/Contents/Resources/RuntimeRoot/System/Library/Frameworks/AudioToolbox.framework/libEmbeddedSystemAUs.dylib 0x7fff438e9817
24 mshMIGPerform (x86_64) /Applications/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/Library/Developer/CoreSimulator/Profiles/Runtimes/iOS.simruntime/Contents/Resources/RuntimeRoot/usr/lib/libAudioToolboxUtility.dylib 0x7fff2e30936a
25 MSHMIGDispatchMessage (x86_64) /Applications/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/Library/Developer/CoreSimulator/Profiles/Runtimes/iOS.simruntime/Contents/Resources/RuntimeRoot/usr/lib/libAudioToolboxUtility.dylib 0x7fff2e309759
26 void * caulk::thread_proxy<std::tuple<caulk::thread::attributes, AURemoteIO::IOThread::IOThread(AURemoteIO&, caulk::thread::attributes const&, caulk::mach::os_workgroup const&)::'lambda'(), std::tuple<>>>(void *) (x86_64) /Applications/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/Library/Developer/CoreSimulator/Profiles/Runtimes/iOS.simruntime/Contents/Resources/RuntimeRoot/System/Library/Frameworks/AudioToolbox.framework/libEmbeddedSystemAUs.dylib 0x7fff438a7200
27 _pthread_start (x86_64) /usr/lib/system/libsystem_pthread.dylib 0x7fff6da2b8fc
28 thread_start (x86_64) /usr/lib/system/libsystem_pthread.dylib 0x7fff6da27443
My mistake was that while building QT6.4 on Windows for Android I tried to set OPENSSL_ROOT_DIR
as an environment variable that doesn’t take an effect. Now I set it as an argument:
C:\dev\build\qta
set "CMAKE_ROOT=C:\dev\PFiles\cmake-3.24.2-windows-x86_64\bin"
set "NINJA_ROOT=C:\dev\PFiles\ninja-win"
set "PERL_ROOT=C:\dev\PFiles\Strawberry\perl\bin"
set "MINGW_ROOT=C:\dev\PFiles\x86_64-12.2.0-release-win32-seh-rt_v10-rev0\mingw64\bin"
set "PYTHON_ROOT=C:\dev\PFiles\Python35"
set "JDK_ROOT=C:\dev\libs\jdk-19\bin"
set PATH=C:\WINDOWS\system32;C:\WINDOWS
set PATH=%CMAKE_ROOT%;%PATH%
set PATH=%NINJA_ROOT%;%PATH%
set PATH=%MINGW_ROOT%;%PATH%
set PATH=%PERL_ROOT%;%PATH%
set PATH=%PYTHON_ROOT%;%PATH%
set PATH=%JDK_ROOT%;%PATH%