qt - 将 Qt 布局应用到随机放置的小部件 UI
问题描述
在我的 CentOS 7 下的 Qt 5.10.0 项目中,我有一个 UI 文件,其中包含一个设备的图片,图片上是一些随机放置在图片上的标签和按钮(这里随机是指没有行或列的形式)。我添加了一个滚动区域,然后在其中添加了所有内容。当我应用任何类型的布局以使滚动区域正常工作时,小部件会以一种疯狂的方式放错位置。
例如,在此视频中,滚动区域的布局有效,因为小部件以行方式放置,您可以添加任意数量的行。我发现了其他几个具有类似设计的教程。
由于布局是滚动区域工作所必需的,因此我有几个想法:
- 为这个 UI 编写一个自定义布局管理器,然后将滚动区域的布局设置为它的一个实例。
尝试重新设计 UI 并强制布局更有条理。我试过这个,但图像破坏了所有小部件的所有错误。例如,将一些小部件分组为水平布局,然后将布局分组为垂直布局。但话又说回来,图像打破了一切。- 我有另一个 UI 可以在其中滚动区域工作,但是因为小部件以行方式布局,然后分组在不需要额外步骤的组框中。
对于在这样的 UI 上实现滚动区域,您有什么建议?
PS:很抱歉没有提供任何代码示例。所有专有。
解决方案
这将在 Widget 上创建一个滚动区域,其中包含 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
推荐阅读
- javascript - 使用 Lazysizes RIaS 插件有条件地更改数据大小的输出
- c - 嵌套结构值更改时没有任何函数作用于它们。帮助我理解为什么
- regex - 并非所有匹配项都存在时的常规 Expr
- java - 匿名 new View.OnClickListener() 可以替换为 lambda
- javascript - 为什么 JS parseInt 函数对于大整数的行为是这样的?
- twilio - Twilio Flex 何时支持出站呼叫?
- java - 使用 recyclerview 的“onChildRemoved”方法出错
- animation - 如何编辑 Unreal FPS 火焰动画蒙太奇?
- javascript - 如何仅加载 Web 字体作为备份
- c# - 根据字段名称应用自定义转换器