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

时间:2012-08-27 14:15:11

标签: qt layout

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

首先,当窗口非常小时,HBoxLayout中的所有小部件都被调整大小而不考虑它们的sizeHint。 然后我在它们上使用了setFixedSize(sizeHint)。现在它们不会缩小到它们的尺寸以下,但是当窗口非常小时它们会开始重叠。

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

如何使用Qt Layouting系统实现这一目标?

my application: normal window
http://i.stack.imgur.com/WLgLy.png

my application: small window
http://i.stack.imgur.com/IIhhs.png

Thunderbird: normal window    
http://i.stack.imgur.com/AYJ83.png

Thunderbird: small window
http://i.stack.imgur.com/ZyQou.png

2 个答案:

答案 0 :(得分:1)

  1. 将您的小部件放入QScrollArea
  2. 将纵向和横向滚动条策略设置为AlwaysOff
  3. 根据需要布置滚动区域
  4. 完成&完成

答案 1 :(得分:0)

可能这不是你想要的但是考虑一下: 把你的所有东西都放在一个小部件里(在这里只命名为'widget'),不要将这个'widget'放到任何布局中,只需保留它并将此事件函数添加到你的窗口类中:

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

它有效!