将Qt布局应用于随机放置的小部件UI

将Qt布局应用于随机放置的小部件UI,qt,layout,Qt,Layout,在CentOS 7下的Qt 5.10.0项目中,我有一个包含设备图片的UI文件,图片上随机放置了一些标签和按钮(此处随机表示没有任何形式的行或列)。我添加了一个滚动区域,然后添加了其中的所有内容。当我应用任何类型的布局以使滚动区域工作时,小部件会以一种疯狂的方式错位 例如,在本例中,滚动区域的布局是有效的,因为小部件是以行的方式放置的,您可以根据需要添加任意多的行。我找到了其他几个设计类似的教程 由于布局是滚动区域工作所必需的,因此我有几个想法: 编写特定于此UI的自定义布局管理器,然后将滚动区

在CentOS 7下的Qt 5.10.0项目中,我有一个包含设备图片的UI文件,图片上随机放置了一些标签和按钮(此处随机表示没有任何形式的行或列)。我添加了一个滚动区域,然后添加了其中的所有内容。当我应用任何类型的布局以使滚动区域工作时,小部件会以一种疯狂的方式错位

例如,在本例中,滚动区域的布局是有效的,因为小部件是以行的方式放置的,您可以根据需要添加任意多的行。我找到了其他几个设计类似的教程

由于布局是滚动区域工作所必需的,因此我有几个想法:

  • 编写特定于此UI的自定义布局管理器,然后将滚动区域的布局设置为其实例
  • 尝试重新设计UI,并强制布局更加有序。我试过了,但是图像破坏了一切,把所有的小部件都放错地方了
  • 例如,在水平布局中对一些小部件进行分组,然后在垂直布局中对布局进行分组。但这一形象再次打破了一切
  • 我有另一个用户界面,其中滚动区域工作,但因为小部件以行的方式排列,然后分组在分组框中,不需要额外的步骤
  • 对于在这样的UI上实现滚动区域,您有什么建议


    注意:很抱歉没有提供任何代码示例。所有专有信息。

    这将在小部件上创建一个滚动区域,其中有3个随机放置的按钮

    void setupUi(QWidget *Widget)
    {
        scrollArea = new QScrollArea(Widget);
        scrollArea->setGeometry(QRect(10, 10, 200, 200));
        scrollArea->setWidgetResizable(false); // Important! Without this, QScrollArea will try to shrink viewport widget.
        scrollAreaWidgetContents = new QWidget();
        scrollAreaWidgetContents->setGeometry(QRect(0, 0, 1000, 1000)); // Now scrollable area has size 1000x1000 px.
        pushButton = new QPushButton(scrollAreaWidgetContents);
        pushButton->setObjectName(QString::fromUtf8("pushButton"));
        pushButton->setGeometry(QRect(10, 70, 82, 23));
        pushButton_2 = new QPushButton(scrollAreaWidgetContents);
        pushButton_2->setObjectName(QString::fromUtf8("pushButton_2"));
        pushButton_2->setGeometry(QRect(130, 110, 82, 23));
        pushButton_3 = new QPushButton(scrollAreaWidgetContents);
        pushButton_3->setObjectName(QString::fromUtf8("pushButton_3"));
        pushButton_3->setGeometry(QRect(70, 170, 82, 23));
        scrollArea->setWidget(scrollAreaWidgetContents);
    } // setupUi
    

    实际上,滚动区域的工作不需要布局。QScrollArea设计用于显示其客户端小部件viewport的一小部分,而viewport又是布局的所有者。但可以设置视口的尺寸,并将子窗口小部件直接添加到视口中。@AlexanderZavertan我尝试将所有内容都放在组框中,并将组框放在滚动区域中。直到我为组框设置了布局,它才起作用。添加新的QScrollArea。将其属性widgetResizeable设置为false。为QScrollArea的子窗口小部件几何体设置适当的宽度和高度。现在您有了具有所需客户端区域大小的可滚动区域。您确定QGraphicscene不能更好地适合您的情况吗?抱歉,但它似乎不起作用。当我调整大小时,我没有得到一个滚动条。@3bdalla,你有没有尝试过用
    scrollArea->setHorizontalScrollBarPolicy(Qt::ScrollBarAlwaysOn)强制滚动条;scrollArea->setVerticalScrollBarPolicy(Qt::ScrollBarAlwaysOn)?由于我使用Qt creator,我的问题似乎是小部件可调整大小属性,有时在添加滚动区域时,我忘记将其设置为中心小部件。尽管如此,它仍然可以完美地工作。谢谢