我正在使用 aQDeclarativeView
来显示 QML 小部件。如何设置QDeclarativeView
/widget 的最小高度,使其不会变得比我想要的小?我希望能够将其绑定到子小部件的最小尺寸,因此小部件不会重叠并且所有内容都保持适当的间距。
问问题
5979 次
2 回答
4
iBelevie 的解决方案是可靠的,但有点矫枉过正。QML 在某种程度上是类固醇上的 CSS,并支持内联 javascript。我希望您现在知道这是怎么回事 :)
只需将您的属性定义为条件语句:
height: (root.height < threshold) ? minHeight: WhateverIsEpressibleInJavaScript
. 它不是圆滑和可靠的解决方案,但至少它是一个单行内标记。我把它留给读者思考它是否好。
于 2013-11-18T15:57:42.163 回答
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
,定义两个槽(view
是QDeclarativeView
):
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
也会更改。
于 2013-04-17T19:25:35.927 回答