2014-04-05 98 views
3

我需要正確的屏幕尺寸爲開端,但如果我這樣做代碼:QML屏幕在應用程序不正確的屬性啓動

import QtQuick 2.0 
import QtQuick.Window 2.0 

Rectangle { 

    MouseArea { 
     anchors.fill: parent 
     onClicked: { 
      console.log(Screen.height, Screen.width, Screen.desktopAvailableHeight, Screen.desktopAvailableWidth); 
     } 
    } 

    Component.onCompleted: { 
     console.log(Screen.height, Screen.width, Screen.desktopAvailableHeight, Screen.desktopAvailableWidth); 
    } 
} 

我在鼠標在啓動 零和正確的屏幕尺寸點擊

0 0 0 0 
1200 1920 1133 1920 

如何判斷這是什麼? 如何在應用程序開始時獲得正確的屏幕尺寸?

回答

2

目前我正在解決類似的問題。 從Screen documentation

需要注意的是,因爲該項目或窗口沒有被這個 時間在屏幕上顯示的屏幕類型不是在Component.onCompleted, 有效

所以,你贏了」無法使用onCompleted()從屏幕項目獲取屏幕大小。 但相反,你可以從應用程序的C++側這一信息,並傳遞給QML方面:

QScreen* screen = QGuiApplication::primaryScreen(); 
QSize screenSize="<<screen->size(); 
QtQuick2ApplicationViewer viewer; 
QQmlContext* qmlContext = viewer.rootContext(); 
qmlContext->setContextProperty("screenSize", screenSize); 
+0

是的,我想這一個了,在這種情況下面臨的任何變量i設置沒有定義問題主Component.on完成。看起來它定義在稍後發生。現在我有一些骯髒的黑客。我等到Screen.height和Screen.width!= 0,然後動態創建qml對象。 – xanm

+0

你能更詳細地描述你的任務嗎?你想在onCompleted中創建什麼? –

+0

我有qml-box2d遊戲,在開始時我需要通過屏幕尺寸來計算比例尺,但屏幕尺寸爲零的比例以及box2d對象創建它們的尺寸爲零,並且在box2d上游戲粉碎聲明 – xanm

相關問題