代码之家  ›  专栏  ›  技术社区  ›  3bdalla

将qt布局应用于随机放置的小部件ui

  •  0
  • 3bdalla  · 技术社区  · 6 年前

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

    在这 video 例如,滚动区域的布局工作,因为小部件以行的方式放置,您可以添加任意多行。我找到了其他几个设计类似的教程。

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

    1. 编写特定于此用户界面的自定义布局管理器,然后将滚动区域的布局设置为其实例。
    2. 尝试重新设计ui,并强制布局更有条理。我试过了,但是图片打破了所有的错误放置所有的小部件。
    3. 例如,在水平布局中对一些小部件进行分组,然后在垂直布局中对布局进行分组。但又一次,图像破坏了一切。
    4. 我有另一个用户界面,滚动区工作,但因为小部件是以行的方式分层的,然后分组在不需要额外步骤的分组框中。

    对于在这样的用户界面上实现滚动区域,您有什么建议?

    备注:很抱歉没有提供任何代码示例。全部所有权。

    1 回复  |  直到 5 年前
        1
  •  2
  •   Alexander Zavertan    6 年前

    这将在小部件上创建一个滚动区域,其中有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