Qt小部件应用程序-基于方向的不同布局

Qt小部件应用程序-基于方向的不同布局,qt,qt5,Qt,Qt5,我有一个qt widgets应用程序,如果屏幕方向是纵向还是横向,或者如果窗口的大小调整为比宽度高,则需要重新排列。该应用程序在两种模式下都有相同的小部件和功能,只是布局不同而已 我意识到可以在运行时根据调整大小事件在布局中移动小部件,但这一点并不理想,因为您无法在设计器中看到它之前的样子。我在归档文件中也发现了这个例子:它们有两个独立的UI,可以选择在屏幕调整大小时显示哪个UI,但在这种情况下,每一个UI更改、插槽连接等都必须对两个UI进行,这也非常繁琐、不可扩展且容易出错 有没有一个干净的方

我有一个qt widgets应用程序,如果屏幕方向是纵向还是横向,或者如果窗口的大小调整为比宽度高,则需要重新排列。该应用程序在两种模式下都有相同的小部件和功能,只是布局不同而已

我意识到可以在运行时根据调整大小事件在布局中移动小部件,但这一点并不理想,因为您无法在设计器中看到它之前的样子。我在归档文件中也发现了这个例子:它们有两个独立的UI,可以选择在屏幕调整大小时显示哪个UI,但在这种情况下,每一个UI更改、插槽连接等都必须对两个UI进行,这也非常繁琐、不可扩展且容易出错


有没有一个干净的方法来处理这种情况?或者至少在不运行应用程序的情况下可视化两种模式?Qt版本是5.12+

理论上,您可以创建2个文件或对象。一个是myLandscapeWidget,另一个是MyTravelWidget。用一个加载器包围他们,可以做一个简单的动作

Loader {
    id: myLoader
    anchors.fill: parent
    sourceComponent: Screen.orientation === Qt.LandscapeOrientation ? land : port

    Component {
        id: land
        myLandscapeWidget {
            width: 500
            height: 100
        }
    }

    Component {
        id: port
        myPortraitWidget {
            width: 100
            height: 500
            visible: Screen.orientation !== Qt.LandscapeOrientation
        }
    }
}
嗯,至少这是它的要点。。。 一些链接:

理论上,您可以创建两个文件或对象。一个是myLandscapeWidget,另一个是MyTravelWidget。用一个加载器包围他们,可以做一个简单的动作

Loader {
    id: myLoader
    anchors.fill: parent
    sourceComponent: Screen.orientation === Qt.LandscapeOrientation ? land : port

    Component {
        id: land
        myLandscapeWidget {
            width: 500
            height: 100
        }
    }

    Component {
        id: port
        myPortraitWidget {
            width: 100
            height: 500
            visible: Screen.orientation !== Qt.LandscapeOrientation
        }
    }
}
嗯,至少这是它的要点。。。 一些链接:

虽然我没有使用qml…但是,这种方法是否仍然需要为每个小部件复制按钮处理代码等?啊,我的错。以前从未使用过小部件。这将需要重新定位和复制代码,是的。但是您可以创建单独的文件,以避免代码重复,包括它并使用其中的代码。你也可以根据屏幕使用定位点和相对边距,这也会很好地重新定位它们。虽然我没有使用qml…但这种方法是否仍然需要为每个小部件复制按钮处理代码等?啊,那我就糟了。以前从未使用过小部件。这将需要重新定位和复制代码,是的。但是您可以创建单独的文件,以避免代码重复,包括它并使用其中的代码。您还可以根据屏幕使用定位点和相对边距,这样也可以很好地重新定位它们