私は QML が初めてで、QML で基本的なレイアウトを定義するのに苦労しています。ユーザーがウィンドウのサイズを変更したときにサイズが変更されるように、要素をウィンドウに固定するにはどうすればよいですか? ウィンドウで使用可能なすべてのスペースを埋める Rectangle を追加したいのですが、qml ファイル内からこれを行う方法が見つかりません。これまでに見つけたすべての例では、固定の幅と高さを使用していますが、これは、ウィンドウのサイズが変更されたときに、要素が事前設定されたサイズを維持することを意味します。
2 に答える
あなたの特定の問題について:
- 親(兄弟)に基づいてすべての要素をアンカーします。
- ここで説明するように、常に最上位のqml要素をビューアスペースを満たすようにします。
それに追加します。このようなサイズ変更を行う必要がある場合は常に、ジオメトリの変更について一方から他方に通知する必要があります。ちなみに、qmlからC ++へ、またはC++からqmlへ。
トップウィンドウでサイズ変更についてqmlに伝えるには:
qmlの最上位の親要素は、ウィジェットのサイズ変更に関するシグナルを受け取りません。手動で行う必要があります。
トップウィジェットが実際にサイズ変更されたという情報を取得するには、resizeEvent関数を実装する必要があります。
実装が呼び出されるたびに、qml側にサイズ変更が行われたことを通知する必要があるため、qmlの最上位の親もそれ自体のサイズを変更する必要があります。
一番上のqml要素のサイズ変更についてC++に伝えるには:
同様に、C ++のウィジェットは、最上位のqml要素のサイズ変更に関するシグナルを受け取りません。手動で行う必要があります。
- クラスをC++側からqmlに公開します。
- 最上位のqml要素が変更されるたびに、このクラスの関数を呼び出してこの変更を通知し、最上位のウィジェットのサイズも変更するように依頼します。
これらのアプローチの基本的な考え方は、こことここで得ることができます。
これに対する簡単な答えは、使用することです
Item {
anchors.fill: parent
}
に相当する
Item {
anchors {
top: parent.top
left: parent.left
right: parent.right
bottom: parent.bottom
}
}
親は、アイテムを内部に固定するオブジェクトです。これは通常は親ですが、技術的には何にでも固定できます。
qmlアプリケーションのデフォルトオプションでは、アプリケーションウィンドウはメインqmlファイルのルート要素のサイズに合わせてサイズ変更されるため、通常、トップレベル要素のサイズを静的に変更することを追加したいと思います。もっとトリッキーなことをしたい場合は、アプリケーションの QDeclarativeView を生成する C++ を変更する必要があります。