从QML获取实际视图大小

时间:2016-02-09 18:38:21

标签: c++ qt qml

这似乎是一个简单的问题,但我无法找到解决方案。我在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)
};

1 个答案:

答案 0 :(得分:0)

20像素差异来自菜单栏。