【发布时间】:2012-02-29 16:51:38
【问题描述】:
我正在用 qt 开发一个 GUI。我有一个QWidget,在QHBoxLayout 内有四个QPushButton。
这些按钮每个都有一个图标。
我需要覆盖QWidget::resizeEvent(QResizeEvent* event),因为我不知道我的窗口到底有多大。我的按钮也是如此。
这意味着我也必须调整图标大小。
我想放一个:
button1->setIconSize(button1->size());
在myWidget::resizeEvent(QResizeEvent* event) 内部,但是当我启动我的应用程序时,myWidget::resizeEvent 被递归调用。
我什至尝试使用 QtDesigner(eclipse 插件) 设置图标,但什么也没有。
唯一能产生良好效果的方法是为按钮设置固定大小,但这不是我需要的。
resizeEvent的代码:
void myWidget::resizeEvent(QResizeEvent* event) {
this->QWidget::resizeEvent(event);
ui.button1->setIconSize(ui.button1->size());
ui.button2->setIconSize(ui.button2->size());
ui.button3->setIconSize(ui.button3->size());
ui.button4->setIconSize(ui.button4->size());
}
为什么用 setIconSize 递归调用 resizeEvent ?
有没有人遇到过同样的问题?
建议在不通过resizeEvent 的情况下做同样的事情?
【问题讨论】:
-
我认为递归是设计使然。来自 Qt 文档:“警告:在 resizeEvent() 中调用 resize() 或 setGeometry() 会导致无限递归。”
-
你需要一个适当的布局,它负责调整底层元素的大小。如果您认为必须调用子元素的 resize() 或 setSize(),则您的小部件布局有问题。
-
按钮已经在 QHBoxLayout 中,可以正确调整按钮的大小..