2017-09-21 22 views
0

私はMicrosoft Surface 3/4のQMLアプリを開発しており、向きをポートレートに固定する必要があります。私はQML/QTのQScreen/ScreenコンポーネントのsetOrientation()を期待していましたが、APIが見つかりません。QML 2で画面の向きをロックする方法は?

QT 5.9.1を使用しています。ご提案ください。

+0

私はアンドロイドのために、その上で何かを持っているとiOSそれが同じ場合のために、おそらく、外部から行われているQMLとは思いません窓。 – dtech

+0

はいAndroidやiOSのサンプルがたくさん見つかりました.Windowsで外部からやってもらえますか? – pra7

+1

あなたは画面の回転だけで暮らすことができます。あなたのルート項目に回転を設定することによって、 'Screen'-propertiesを見て自己に知らせることができます。これはすべてのOSで同じように動作するはずです。 – derM

答えて

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

0

外部で可能かもしれません(試したことがない、@dtech回答をご覧ください)。

のための情報、それは不可能ですQScreenを使用して

"setOrientationを期待して()QML/QTでQScreen /スクリーン コンポーネントについて"。

QScreenプロパティのドキュメントを参照してください。

http://doc.qt.io/qt-5/qscreen.html#details

"nativeorientaion" のような向きに関連するすべてのプロパティ、 "方向 "と" primaryorientation"、彼らはすべてCONSTANTプロパティです。

とQtのプロパティシステムは、定数プロパティが書き込み機能を持つことができない、と言っている:CONSTANT attibuteの

存在は、プロパティの値が一定であることを示しています。与えられたオブジェクトインスタンスに対して、定数プロパティのREADメソッドは呼び出されるたびに同じ値を返す必要があります。この定数値は、オブジェクトの異なるインスタンスごとに異なる場合があります。定数プロパティには、WRITEメソッドまたはNOTIFYシグナルを含めることはできません。

+1

あなたは答えを知らないと言って答えを投稿しません。 – dtech

+0

@dtech質問に「QScreen/ScreenコンポーネントのsetOrientation()を期待しています」と聞いています....私の答えはその点にアドレスしてください。 – Naidu

+0

@dtech有益かつ有用でない場合は、削除することができます。私にお知らせください – Naidu

2

Qtでは何も提供していませんが、IMOは重要な省略です。あなたは、異なるシステムがそれをどのように扱うかに頼っています。幸いにも、それは窓のために非常に簡単です。あなたはmain.cppにして、現在のプロセスのためにそれを設定するには、WindowsのAPIを使用することができます。

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

// in main() 
#ifdef _WIN32 
SetDisplayAutoRotationPreferences(ORIENTATION_PREFERENCE_PORTRAIT); 
#endif 

あなたも、この作業を取得するためにUser32.libまたはUser32.dllに対してプロジェクトをリンクする必要があります。

関連する問題