问题4.8:布局:如果没有更多可用空间,则隐藏小部件



我的应用程序窗口可以调整为零大小。我不想限制最小窗口大小。HBoxLayout布局了几个小部件(QLineEdits、QLabels、QPushButtons)。

起初,当窗口很小时,HBoxLayout中的所有小部件都会在不考虑其sizeHint的情况下调整大小。然后我在它们上使用了setFixedSize(sizeHint)。现在,它们不会缩小到sizeHint以下,而是在窗口很小时开始重叠。

我想要的是雷鸟的功能(附截图):它通过将窗口小部件移出窗口边界来平滑地隐藏它们。它们的大小没有变化。

如何使用Qt布局系统实现这一点?

my application: normal window
https://i.stack.imgur.com/WLgLy.png
my application: small window
https://i.stack.imgur.com/IIhhs.png
Thunderbird: normal window    
https://i.stack.imgur.com/AYJ83.png
Thunderbird: small window
https://i.stack.imgur.com/ZyQou.png
  1. 将小部件放入QScrollArea
  2. 将垂直和水平滚动条策略设置为AlwaysOff
  3. 根据需要布局滚动区域

完成&完成

也许这不是您想要的,但请考虑一下:把你所有的东西都放在一个小部件中(这里只命名为"小部件"),不要把这个"小部件"放在任何布局中,让它免费,并把这个事件函数添加到你的窗口类中:

void MainWindow::resizeEvent(QResizeEvent *event){
   ui->widget->move(QPoint(event->size().width()-ui->widget->width()-20,ui->widget->y()));
   QMainWindow::resizeEvent(event);
}

它有效!

最新更新