【问题标题】:Why adjustSize doesn't resize MainWindow in Qt?为什么 adjustSize 不会在 Qt 中调整 MainWindow 的大小?
【发布时间】:2021-09-19 00:18:17
【问题描述】:

我有一个简单的应用程序。在 MainWindow 的构造函数中,我有:

    _someWidget = new someWidgetClass(this);
    _someWidget ->setFixedSize(700,700);
    _someWidget ->move(50,50);
   
    wid = new QWidget(this);
    wid->move(800,800);
    wid->setFixedSize(100,100);

    centralWidget()->adjustSize();
    adjustSize();

我想像这样调整 MainWindow 的大小,他的右下角应该是 wid 的右下角,所以我想将 MainWindow 的大小调整为他的内容。但是adjustSize 不起作用。

我尝试在someWidgetClass 中添加sizeHint() 方法并返回他的大小,但这也无济于事。

【问题讨论】:

  • 如果您不使用 Qt 布局,那么您需要手动设置所有小部件的大小和位置。 adjustSize() 取决于布局。从示例中(对我而言)不清楚您最终要做什么。但对于这种特殊情况,只需手动设置主窗口大小,使其为 900x900。

标签: c++ qt resize


【解决方案1】:

您应该为centralWidget 设置一种布局,例如,我使用QGridLayout 对其进行测试。然后在该布局中添加您的小部件:

 auto  _someWidget = new QWidget(this);
_someWidget->move(50, 50);
_someWidget->setFixedSize(700, 700);

centralWidget()->layout()->addWidget(_someWidget);

auto  wid = new QWidget(this);
wid->move(800, 800);
wid->setFixedSize(100, 100);
centralWidget()->layout()->addWidget(wid);


centralWidget()->adjustSize();
adjustSize();

关于adjustSize功能:

调整小部件的大小以适合其内容。该功能使用 sizeHint() 是否有效,即尺寸提示的宽度和高度为 >= 0。否则,它将大小设置为覆盖所有子小部件的子矩形(所有子小部件矩形的联合)。 对于windows,屏幕尺寸也被考虑在内。如果 sizeHint() 小于 (200, 100) 并且尺寸政策正在扩大, 窗口将至少为 (200, 100)。窗口的最大尺寸 是屏幕宽度和高度的 2/3。

【讨论】:

  • 是的,这是可能的解决方案,但我不能使用布局。这只是 MainWindow 中有 2 个小部件的示例。有时我会有更多小部件,我必须将其移动到目标位置。当我将使用布局时,我只能将它们设置为向右、向左或居中。但当然谢谢你:)
  • 在 GridLayout 中,您可以将对象放置在任何您想要的位置,请阅读QGridLayout。 GridLayout 就像一个矩阵,你可以设置对象的放置位置。
  • adjustSize不适合你的原因是sizeHint(),对于windows来说,还要考虑屏幕大小。如果 sizeHint() 小于 (200, 100) 并且尺寸策略正在扩展,则窗口将至少为 (200, 100)。窗口的最大尺寸是屏幕宽度和高度的 2/3。
  • 使用 QDebug 并打印您的小部件 sizeHint ,然后您可以看到,小于 (200,100)。
  • 我推荐layout ,我不知道其他方式。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-02-17
  • 2018-05-13
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多