32813


Qt Creator で `hoge.ui.qml` を作成、以下のような構成にエレメントを配置しました。

[code]

    item1 (Item)
    ┗sliderHorizontal1 (Slider)
    ┗button1 (Button)
    
[/code]

この際、`sliderHorizontal1` と `button1` は親となる `item1`
の上下一杯を占有したいので、上下にアンカーを設定し、ターゲットに `parent` を指定の上、Margin を `0` にしました。  
この試みは成功しましたが左右の配置に問題があります。

`sliderHorizontal1` は親の左側 75% を占有、`button1` は残りの 25% を占有したいので、Margin に `100`
を入力、 (`item1` の既定サイズはどうやら 400x400 となるようで、これで少なくともエディタ上では右側 1/4 が空きます) 続いて
`button1` の左アンカーを `parent` から `sliderHorizontal1` に変更しました。ちなみに `item1`
は親エレメントで `anchors.fill: parent` と指定しています。

これで試したところ、`sliderHorizontal1` は `button1` と 3:1 の比になってくれません(ボタンが異様に狭くなる)。おそらく
Margin が絶対座標なのだろうと推測しますが、それでは相対座標、ここでいう親に対する 75% といった設定を行うにはどうすればよいでしょうか?

環境は下記の通りです。

  * Qt Creator 4.0.1 (Linux版)
  * Qt 5.6.1
  * QtQuick 2.4
  * QtQuick.Controls 1.5

どうかご教示よろしくお願いします。


CC BY-SA 3.0
2017-02-20T08:22:17.983
32805
2017-02-20T12:44:13.050
2017-02-20T08:29:14.010
20151
20151
question
qt qt-creator
Qt Creator デザインモードで相対的な配置をしたい


すでにご存じの内容もあるかもしれませんので、そのあたりはご了承ください。

まず、*.ui.qmlは以下のようなファイル構成（2つセット）で使う事が想定されています。

  * Hoge.qml：ui.qmlファイル専用のロジックを書く
  * HogeForm.ui.qml：デザイナで編集

単純にデザインモードを使用したいだけなら、hoge.qml単独でも構いません。  
ただし、見た目の無いエレメント（例えばListModelなど）を配置すると親子関係などを編集するツリーで変な挙動をするかもしれません。

で、私が作るなら以下のような感じです。参考にしてみてください。

[code]

    //Hoge.qml
    import QtQuick 2.4
    
    HogeForm {
    }
    
[/code]

[code]

    //HogeForm.ui.qml
    import QtQuick 2.4
    import QtQuick.Controls 1.5
    import QtQuick.Layouts 1.1
    
    RowLayout {
        width: 400
        height: 50
        property alias sliderHorizontal: sliderHorizontal
        property alias button: button
    
        Slider {
            id: sliderHorizontal
            Layout.fillHeight: true
            Layout.preferredWidth: parent.width * 0.75
        }
    
        Button {
            id: button
            text: qsTr("Button")
            Layout.fillHeight: true
            Layout.fillWidth: true
        }
    }
    
[/code]


CC BY-SA 3.0
2017-02-20T12:44:13.050
32813
2017-02-20T12:44:13.050
20743
32805
answer