Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/152.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 从QML获取实际视图大小_C++_Qt_Qml - Fatal编程技术网

C++ 从QML获取实际视图大小

C++ 从QML获取实际视图大小,c++,qt,qml,C++,Qt,Qml,这似乎是个简单的问题,但我找不到解决办法。我在QML中有一个ScrollView,它的布局策略是由锚配置的,根本没有指定固定的大小。因此,当用户调整窗口大小时,它会自动拉伸。在我的一些类中,我需要知道滚动视图大小信息,因此我从QObject继承这些类并将它们注册为QML类型,然后使用QProperty绑定到ScrollView witdh和height属性 结果是QML引擎似乎在修复ScrollView之前对其进行了多次调整。其中一些调整将宽度更改为一些负值,如-140。最后,它将其更改为正值,

这似乎是个简单的问题,但我找不到解决办法。我在QML中有一个ScrollView,它的布局策略是由锚配置的,根本没有指定固定的大小。因此,当用户调整窗口大小时,它会自动拉伸。在我的一些类中,我需要知道滚动视图大小信息,因此我从QObject继承这些类并将它们注册为QML类型,然后使用QProperty绑定到ScrollView witdh和height属性

结果是QML引擎似乎在修复ScrollView之前对其进行了多次调整。其中一些调整将宽度更改为一些负值,如-140。最后,它将其更改为正值,但该值与Design计算的尺寸不同。例如,在我的例子中,最后一次调用set height将其设置为290,但是如果我去设计并检查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)
};

20像素的差异来自菜单栏。

20像素的差异来自菜单栏