2016-05-17 11 views
1
import QtQuick 2.5 
import QtQuick.Controls 1.4 
import QtQuick.Controls.Styles 1.4 
import QtQuick.Layouts 1.2 

ApplicationWindow 
{ 
    visible: true 
    width: 640 
    height: 480 

    property int lastW: 0 
    property int lastH: 0 

    function doSomething() 
    { 
     if (lastW == width && lastH == height) 
      console.log("width & height same as last time") 

     lastW = width; 
     lastH = height; 
    } 

    onHeightChanged: doSomething(); 
    onWidthChanged: doSomething(); 
} 

なぜ、doSomethingが呼び出され、幅と高さが変更されないのはなぜですか(最初は一度だけあります)。ウィンドウのサイズを変更すると、コンソールのログメッセージが表示されます。Qt5 QML、どうしてonHeightChangedとonWidthChangedを変更せずに呼び出すのですか?

実行しているWindows 8.1

+2

?ウィンドウのサイズを変更すると、高さと幅が変更されるためです。私はあなたの質問を逃したのですか? – sk2212

答えて

2

doSomething実行するたびApplicationWindow変化のwidthまたはheight。ウィンドウは、両方のディメンションのサイズを同時に変更することがあります。ある瞬間のサイズが100x100から101x101に変更された場合、widthChangedheightChangedの両方の信号がwidth=101height=101に対して放出されます。そのため、一見すると決してこのようなことは起こらないはずですが、console.log("width & height same as last time")が実行されています。


doSomethingさんへのコメントは開始時に実行されています。私の場合は、ウィンドウのサイズを変更しない限り、doSomethingは決して起きません。アプリケーションの起動時に起動した場合、ApplicationWindowには初期サイズ(0x0など)があり、その直後にサイズが640x480に変更され、doSomethingが実行される可能性があります。


私が上に書いたものは、有効でないことがあります。 ApplicationWindowのサイズを1次元で調整しようとすることができますが、同じ値に対して信号が2回発生することがあります。私の推測では、そのような場合には値が非常に速く変化したので、QMLでchangedを2回トリガしている間は、第2の値だけを読み取ることになります。

は、私はそれがこのように動作することを疑う: width=100はその後すぐに101火災changed102への変更に値を変更して再度changedが発射されます。その後、QML信号が実行されている。今度は2つのchangedシグナルを受信しましたが、両方とも値102と表示されます。

+0

ありがとうございます。あなたは正しいです。同時変更があれば_both_を呼び出す必要があります。 –

関連する問題