QWidget sizeHint()

Posted

技术标签:

【中文标题】QWidget sizeHint()【英文标题】: 【发布时间】:2014-12-14 19:54:17 【问题描述】:

我在自定义的QPushButton 类中重新实现(重载)了sizeHint() 函数,如下所示:

QSize CustQPushButton::sizeHint()const         

   QWidget *parentWindow=this->parentWidget(); //a pointer to the parent window   
  return QSize(parentWindow->width()/10,60);

问题是:

当窗口最初显示时,我的按钮的宽度是预期的(窗口的 1/10),但是当窗口调整大小时 按钮的大小不会与窗口(父级)成比例。 CustQPushButton 大小策略设置为 Fixed/Fixed,我的实例化按钮位于 QGridLayout 内。

有人可以帮帮我吗?

【问题讨论】:

我不认为你想要修复。我正在考虑扩展或首选。 实际上我想要修复。我希望按钮的宽度提示与父窗口宽度成比例。 让父 resizeEvent 为所有 CustQPushButton 按钮调用 adjustSize。 我尝试实现您的代码“AlexanderVX”,但它也无法预测:最初按钮是相当的,然后在调整窗口大小时它们会重叠。感谢您的想法。 如果layouts 和最小/最大尺寸的组合不能达到你想要达到的效果,而不是重载 sizeHint,也许可以试试? 【参考方案1】:

您不需要自定义类来完成这种微不足道的事情。大小提示的目的是完全不同的。默认布局可以处理 1/10 宽度。您应该使用QGridLayout::setColumnStretch 函数。例如,将两列的拉伸因子设置为 1 和 9 会将第一列的大小调整为父列的 1/10(假设第二列的内容可以增长足够多)。

【讨论】:

拉伸可以在列或原始数据之间进行恒定缩放,虽然我理解你的意思,但我仍然认为它不合适,在下面的链接中,你会在页面中间找到一个部分命名:“将小部件添加到布局”女巫告诉布局在考虑拉伸因子之后首先将小部件排列在其尺寸策略和尺寸提示旁边。谢谢。 qt-project.org/doc/qt-4.8/layout.html

以上是关于QWidget sizeHint()的主要内容,如果未能解决你的问题,请参考以下文章

调整大小时如何使 QTreeWidget 调用 sizeHint?

应用程序的确切大小是 size 或 sizeHint

QTreeWidget:如何动态更改 sizeHint?

强制 QTabBar 选项卡保持尽可能小并忽略 sizeHint

没有为 QTableView 行调用 QStyledItemDelegate 的 sizeHint 方法

为表中的特定列设置最大 sizehint