Qt 如何在QML2中锁定屏幕方向?

Qt 如何在QML2中锁定屏幕方向?,qt,qml,qtquick2,Qt,Qml,Qtquick2,我正在为Microsoft Surface 3/4开发QML应用程序,我需要将方向锁定为纵向。我希望QML/QT中的QScreen/Screen组件有一个setOrientation(),但我没有找到任何API 我正在使用QT 5.9.1。请建议。可能是外部可能的(从未尝试过,请查看@dtech答案) 有关“”的信息应为QScreen/Screen提供setOrientation() QML/QT中的组件“ 使用QScreen是不可能的 查看QScreen属性的文档 所有与方向相关的属性,如“

我正在为Microsoft Surface 3/4开发QML应用程序,我需要将方向锁定为纵向。我希望QML/QT中的
QScreen/Screen
组件有一个setOrientation(),但我没有找到任何API


我正在使用QT 5.9.1。请建议。

可能是外部可能的(从未尝试过,请查看@dtech答案)

有关“”的信息应为QScreen/Screen提供setOrientation() QML/QT中的组件“

使用
QScreen
是不可能的

查看QScreen属性的文档

所有与方向相关的属性,如“NativeOrientation”、“orientation”和“primaryorientation”,都是
常量属性

QT属性系统表示,常量属性不能具有写入功能:


常量attibute的存在表示属性值为常量。对于给定的对象实例,常量属性的READ方法每次调用时必须返回相同的值。对于对象的不同实例,此常量值可能不同。常量属性不能有写入方法或通知信号。

可能是外部可能的(从未尝试过,请查看@dtech-answer)

有关“”的信息应为QScreen/Screen提供setOrientation() QML/QT中的组件“

使用
QScreen
是不可能的

查看QScreen属性的文档

所有与方向相关的属性,如“NativeOrientation”、“orientation”和“primaryorientation”,都是
常量属性

QT属性系统表示,常量属性不能具有写入功能:


常量attibute的存在表示属性值为常量。对于给定的对象实例,常量属性的READ方法每次调用时必须返回相同的值。对于对象的不同实例,此常量值可能不同。常量属性不能有写入方法或通知信号。

Qt在这方面没有提供任何内容,这是一个重要的遗漏。你只能依靠不同的系统来处理。幸运的是,这对于windows来说相当容易。您可以使用windows API在main.cpp中为当前进程设置它:

// includes
#ifdef _WIN32
#include <windows.h> 
#endif

// in main()
#ifdef _WIN32
SetDisplayAutoRotationPreferences(ORIENTATION_PREFERENCE_PORTRAIT);
#endif
//包括
#ifdef_WIN32
#包括
#恩迪夫
//大体上
#ifdef_WIN32
SetDisplayAutoRotationPreferences(方向\首选项\纵向);
#恩迪夫

您还必须将您的项目链接到
User32.lib
User32.dll
,才能使其正常工作。

Qt在这方面没有提供任何内容,这是一个重要的遗漏。你只能依靠不同的系统来处理。幸运的是,这对于windows来说相当容易。您可以使用windows API在main.cpp中为当前进程设置它:

// includes
#ifdef _WIN32
#include <windows.h> 
#endif

// in main()
#ifdef _WIN32
SetDisplayAutoRotationPreferences(ORIENTATION_PREFERENCE_PORTRAIT);
#endif
//包括
#ifdef_WIN32
#包括
#恩迪夫
//大体上
#ifdef_WIN32
SetDisplayAutoRotationPreferences(方向\首选项\纵向);
#恩迪夫

您还必须将您的项目链接到
User32.lib
User32.dll
以使其正常工作。

@dtech-answer也可以正常工作,有一种方法可以在不链接
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 ) );
}
#包括
typedef枚举方向\首选项{
方向\首选项\无=0x0,
方向\首选项\横向=0x1,
方向\首选项\纵向=0x2,
方向\首选项\横向\翻转=0x4,
方向\首选项\纵向\翻转=0x8
}取向与偏好;
typedef BOOL(WINAPI*pSDARP)(方向\首选方向);
pSDARP-pARP;
pARP=(pSDARP)GetProcAddress(GetModuleHandle(TEXT(“user32.dll”),“SetDisplayAutoRotationPreferences”);
如果(pARP){
pARP(方向偏好)(方向偏好景观方向偏好景观翻转);
}

有关更多信息,请参阅:

@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 ) );
}
#包括
typedef枚举方向\首选项{
方向\首选项\无=0x0,
方向\首选项\横向=0x1,
方向\首选项\纵向=0x2,
方向\首选项\横向\翻转=0x4,
方向\首选项\纵向\翻转=0x8
}取向与偏好;
typedef BOOL(WINAPI*pSDARP)(方向\首选方向);
pSDARP-pARP;
pARP=(pSDARP)GetProcAddress(GetModuleHandle(TEXT(“user32.dll”),“SetDisplayAutoRotationPreferences”);
如果(pARP){
pARP(方向偏好)(方向偏好景观方向偏好景观翻转);
}

有关更多信息,请参阅:

我认为qml在这方面没有任何内容,对于android和ios,它是在外部完成的,对于windows可能也是如此。是的,我找到了很多android和ios的示例。。在Windows外部是否还有其他操作?您可以只使用屏幕旋转,通过查看
屏幕
-属性来通知自己,并通过在根项目上设置旋转来对抗旋转。这应该适用于所有操作系统。谢谢你的建议。我会努力的!!我不认为qml在这方面有什么,对于android和ios,它是外部完成的,对于windows可能也是如此。是的,我发现了很多android和ios的例子。。在Windows外部是否还有其他操作?您可以只使用屏幕旋转,通过查看
屏幕
-属性来通知自己,并通过在根项目上设置旋转来对抗旋转。这