这似乎是一个简单的问题,但我无法找到解决方案。我在QML中有一个ScrollView,它的布局警察由锚点配置,根本没有指定固定大小。因此,当用户调整窗口大小时,它会自动拉伸。在我的一些类中,我需要知道滚动视图大小信息,所以我从QObject继承这些类并将它们注册为QML类型,然后使用QProperty绑定到ScrollView witdh和height属性。
结果是QML引擎似乎在修复之前多次调整ScrollView。其中一些调整将宽度更改为某些负值,如-140。最后它将其更改为正值,但该值与Design计算的大小不同。例如,在我的例子中,最后一次调用set height将它设置为290,但是如果我去Design并检查ScrollView大小,它的高度是310.
在C ++类中从QML获取正确大小的视图的正确方法是什么?
主要QML文件
ApplicationWindow {
id : applicationWindow
visible: true
width: 640
height: 480
minimumWidth: 640
minimumHeight: 480
// skipped some unrelated opponents
StackView {
id: stackView
anchors.fill: parent
focus: true
initialItem: {
[{item : Qt.resolvedUrl("AboutPage.qml")},
{item : Qt.resolvedUrl("ConfigurationPage.qml")}]
}
}
}
ConfigurationPage.qml
Rectangle {
ScreenManager {
id: screenManager
screenModel: screenModel
managementViewW: screenArrangementScrollView.width
managementViewH: screenArrangementScrollView.height
}
ScrollView {
id: screenArrangementScrollView
frameVisible: true
anchors.left: parent.left
anchors.top: parent.top
anchors.bottom: parent.bottom
anchors.topMargin: 100
anchors.bottomMargin: 70
anchors.leftMargin: 70
anchors.horizontalCenter: parent.horizontalCenter
}
}
屏幕管理
class ScreenManager : public QObject
{
Q_OBJECT
public:
ScreenManager();
~ScreenManager();
Q_PROPERTY(ScreenModel* screenModel READ screenModel WRITE setScreenModel)
Q_PROPERTY(int managementViewW READ managementViewW WRITE setManagementViewW)
Q_PROPERTY(int managementViewH READ managementViewH WRITE setManagementViewH)
};
答案 0 :(得分:0)
20像素差异来自菜单栏。