我正在为Microsoft Surface 3/4开发QML应用程序,我需要将方向锁定为纵向。我期待QML / QT中的QScreen/Screen
组件的setOrientation(),但我找不到任何API。
我正在使用QT 5.9.1。请建议。
答案 0 :(得分:2)
Qt没有提供任何相关内容,IMO是一个重要的遗漏。您将依赖于不同的系统如何处理它。幸运的是,Windows非常容易。您可以使用Windows API为main.cpp中的当前进程设置它:
// includes
#ifdef _WIN32
#include <windows.h>
#endif
// in main()
#ifdef _WIN32
SetDisplayAutoRotationPreferences(ORIENTATION_PREFERENCE_PORTRAIT);
#endif
您还必须将您的项目与User32.lib
或User32.dll
相关联才能使其生效。
答案 1 :(得分:1)
@dtech答案也可以,并且有一种方法可以在不链接user32.lib
的情况下执行此操作。只需复制main.cpp
中代码下方的粘贴:
#include <Windows.h>
typedef enum ORIENTATION_PREFERENCE {
ORIENTATION_PREFERENCE_NONE = 0x0,
ORIENTATION_PREFERENCE_LANDSCAPE = 0x1,
ORIENTATION_PREFERENCE_PORTRAIT = 0x2,
ORIENTATION_PREFERENCE_LANDSCAPE_FLIPPED = 0x4,
ORIENTATION_PREFERENCE_PORTRAIT_FLIPPED = 0x8
} ORIENTATION_PREFERENCE;
typedef BOOL (WINAPI *pSDARP)(ORIENTATION_PREFERENCE orientation);
pSDARP pARP;
pARP = (pSDARP) GetProcAddress( GetModuleHandle(TEXT("user32.dll")), "SetDisplayAutoRotationPreferences");
if( pARP ){
pARP( (ORIENTATION_PREFERENCE)(ORIENTATION_PREFERENCE_LANDSCAPE | ORIENTATION_PREFERENCE_LANDSCAPE_FLIPPED ) );
}
有关详细信息,请参阅:Handling Windows Auto-rotate feature in your application
答案 2 :(得分:0)
可能是外部可能的(从未尝试过,请查看@dtech答案)。
的信息“期望QScreen / Screen的setOrientation() QML / QT中的组件“
使用QScreen
是不可能的。
查看QScreen属性的文档。
http://doc.qt.io/qt-5/qscreen.html#details
所有与定位相关的属性,例如“ nativeorientaion ”,“ orientation ”和“ primaryorientation “,它们都是CONSTANT
属性。
QT属性系统说,Constant属性不能具有WRITE功能:
CONSTANT attibute的存在表明属性值是常量。对于给定的对象实例,常量属性的READ方法每次调用时都必须返回相同的值。对于对象的不同实例,该常数值可以是不同的。常量属性不能包含WRITE方法或NOTIFY信号。