如何设置QML小部件的最小大小?

时间:2013-04-17 19:25:36

标签: qt qml qtquick2

我正在使用QDeclarativeView来显示QML小部件。如何设置QDeclarativeView /小部件的最小高度,以便它不会变得比我想要的小?我希望能够将它绑定到子窗口小部件的最小尺寸,因此窗口小部件不会重叠,并且所有内容都保持适当的间隔。

2 个答案:

答案 0 :(得分:4)

iBelevie的解决方案是坚实的,但有点矫枉过正。 QML在某种程度上是针对类固醇的CSS并支持内联javascript。我希望你现在知道这是怎么回事:) 只需将您的属性定义为条件语句: height: (root.height < threshold) ? minHeight: WhateverIsEpressibleInJavaScript。它不是光滑而坚固的解决方案,但至少它是一个单行内部标记。我留下让读者思考它是否好。

答案 1 :(得分:2)

步骤1:在QML中定义最小尺寸

首先,在主窗口小部件中,创建两个属性以保持最小宽度和高度:

property int minWidth: <whatever>
property int minHeight: <whatever>

如果您希望它基于窗口小部件子项的最小大小,您可以执行以下操作:

Item {
    id: root

    property int minWidth: child.minWidth + 40; // Adds a 40px margin
    property int minHeight: child.minHeight + 40; // Adds a 40px margin

    Item {
        id: child
        property int minWidth: <whatever>
        property int minHeight: <whatever>
        anchors.centerIn: root
    }
}

步骤2:将QML中的最小尺寸连接到QDeclarativeView

的最小尺寸

然后,在创建QDeclarativeView的班级中,定义两个广告位(viewQDeclarativeView):

void onMinimumWidthChanged() {
    view->setMinimumWidth(view->rootObject()->property("minWidth").toInt());
}

void onMinimumHeightChanged() {
    view->setMinimumHeight(view->rootObject()->property("minHeight").toInt());
}

然后,当您创建QDeclarativeView

QDeclarativeView *view = new QDeclarativeView(this);
view->setResizeMode(QDeclarativeView::SizeRootObjectToView);
view->setSource(/* Whatever */);
QDeclarativeProperty(view->rootObject(), "minWidth").connectNotifySignal(this, SLOT(onMinimumWidthChanged()));
QDeclarativeProperty(view->rootObject(), "minHeight").connectNotifySignal(this, SLOT(onMinimumHeightChanged()));
onMinimumWidthChanged();
onMinimumHeightChanged();

现在,QDeclarativeView的最小大小将绑定到主QML小部件中定义的最小大小。如果您在QML中的任何位置更改最小尺寸,QDeclarativeView的最小尺寸也会发生变化。