2014-09-25 5 views
0

У меня есть объект изображения в QML (QtQuick 1.0), его высота должна быть относительной (в случае масштабирования окна), но проблема в том, что я пытаюсь отобразить это изображение в полноразмерном виде. Пожалуйста, обратитесь к следующей части моего кода:QML изменение размера изображения

Image { 
     id: selectionDialogImage 
     source: "qrc:/Images/myImage.png" 
     property int oldHeight: sourceSize.height 
     sourceSize.height: testsList.height/3 
     scale: 1 
     anchors.bottom: parent.bottom 
     anchors.left: parent.left 
     visible: false 
     property bool imageFullsize: false 
     MouseArea { 
       anchors.fill: parent 
       onClicked: 
        { 
        if(parent.imageFullsize) 
        { 
         parent.parent = selectionDialogQuestionText; 
         parent.sourceSize.width = undefined; 
         parent.sourceSize.height = testsList.height/3; 
         parent.anchors.horizontalCenter = undefined; 
         parent.anchors.verticalCenter = undefined; 
         parent.anchors.left = selectionDialogQuestionText.left; 
         parent.anchors.bottom = selectionDialogQuestionText.bottom; 
         parent.imageFullsize = false; 
        } 
        else 
        { 
         parent.parent = mainItem; 
         parent.sourceSize.height = parent.oldHeight; 
         //parent.sourceSize.height = undefined; 
         parent.sourceSize.width = mainItem.width; 
         parent.anchors.horizontalCenter = mainItem.horizontalCenter; 
         parent.imageFullsize = true; 
        } 
        } 
       } 
     } 

selectionDialogQuestionText по умолчанию родитель моего элемента изображения а. mainItem - самый большой элемент, он имеет размер всего окна. Поэтому я хочу, чтобы размер изображения был установлен на основе ширины, когда я показываю его на полноэкранном режиме, но в другом состоянии я хочу масштабировать настройку изображения по высоте.

Когда я установил parent.sourceSize.width = mainItem.width;, изображение не масштабируется, но его высота как и раньше (очень мало), поэтому его пропорции неуместны.

Могу ли я хранить старую высоту исходного изображения каким-либо образом? Мне нужно что-то вроде const, потому что property int oldHeight: sourceSize.heigh относительный. Или есть способ восстановить размер изображения по умолчанию, а затем установить высоту/ширину?

UPDATE # 1: Я пытался использовать метод, описанный @Mitch:

property int oldHeight 
Component.onCompleted: { 
    oldHeight = sourceSize.height 
    } 
    sourceSize.height: 250 

но console.log("oldHeight="+parent.oldHeight) несколько строк ниже показывает oldHeight=250, а не первоначальную высоту.

+0

Можете ли вы представить иллюстрации того, что вы пытаетесь сделать? Твой вопрос довольно трудно понять. – Mitch

ответ

1

Могу ли я хранить старую высоту исходного изображения каким-либо образом?

Вы можете использовать Component.onCompleted:

Image { 
    // ... 
    Component.onCompleted: { 
     oldHeight = sourceSize.height 
    } 
} 
+0

Не работает. Посмотрите мое обновление в первом сообщении. – trivelt

+1

Если вы установите 'sourceSize.height: 250', тогда оно всегда будет 250, потому что оно вычисляется до запуска' Component.onCompleted'. Вы должны установить 'sourceSize.height = 250' в конце' Component.onCompleted' вместо этого. – Mitch

+0

Да, спасибо. Я понял это некоторое время назад, но это не решило мою проблему beacuse, исходное значение 'sourceSize.height' было ... странным. Наконец, вместо изменения размера моего изображения я создал еще один Rectangle (содержащий Image {}) в качестве дочернего элемента mainItem (корневой элемент). Поэтому в 'onClicked' у меня есть только' imageFullscreenBox.imgSource = parent.source; 'и' imageFullscreenBox.visible = true; ' – trivelt

Смежные вопросы