窗口中有四个按钮和一个starckwidget,通过重写resize event事件实现窗口的自适应,starckwidget窗口会随着主窗口大小变化而变化,但是里面的子控件就不行了,原因是我的代码只获取了主窗口的children,但是starckwidget的children没有获取,请问如何获取starckwidget的children,谢谢🙏
我现在就是希望实现窗口随意放大缩小,所以子控件都会根据主窗口的缩放比例同步缩放。
我参考这个博主https://blog.csdn.net/hua12134/article/details/84888250实现了功能,但是由于他在主窗口中查找的children,不包括QStarckedWidget控件的children,导致窗口实现后,starckedwidget窗口会根据主窗口进行同比例缩放,但是里面的控件不会。请问有没有像这个链接一样,获取主窗口一样直接一步全部获取starckwidget的children的方法,谢谢!
Qt的QStarckWidget 如何找他到他children
- 写回答
- 好问题 0 提建议
- 追加酬金
- 关注问题
- 邀请回答
-
6条回答 默认 最新
关注 引自免费微信小程序:皆我百晓生
为了实现你所描述的需求,你需要在主窗口的
resizeEvent
中遍历整个窗口树,包括所有的嵌套控件,包括QStackedWidget
中的页面。下面是一个示例代码,它将递归地获取所有子控件,并调整它们的位置和大小:首先,定义一个辅助函数来遍历并调整子控件的大小和位置:
void resizeChildren(QWidget* widget, const QSize& newGeometry) { foreach (QWidget* child, widget->findChildren<QWidget*>()) { child->setGeometry(child->mapFromParent(child->geometry()).translated(newGeometry.topLeft())); if (child->layout()) child->layout()->update(); else resizeChildren(child, newGeometry); } }
然后,在主窗口的
resizeEvent
中调用这个函数:#include <QObject> // ...其他必要的头文件... class MainWindow : public QMainWindow { public: // ...你的构造函数和其他成员... private slots: void onResizeEvent(QResizeEvent*) { // 获取当前窗口的新尺寸 QSize newSize = size(); // 调整主窗口内的控件 resizeChildren(this, newSize); // 为 QStackedWidget 的每个页面做同样的事情 for (int i = 0; i < stackedWidget->count(); ++i) { QWidget *page = stackedWidget->widget(i); if (page) resizeChildren(page, newSize); } } private: QStackedWidget* stackedWidget; // 假设这是你的 QStackedWidget 实例 };
确保在你的
MainWindow
类中有一个对QStackedWidget
实例的引用(这里假设名为stackedWidget
),并在适当的地方初始化它。这将确保无论主窗口还是QStackedWidget
的页面,其内部的所有子控件都会根据主窗口的大小改变而相应地调整。如果你有任何疑问或需要进一步的帮助,请随时告诉我。
解决 无用评论 打赏 举报 编辑记录
悬赏问题
- ¥15 部分客户订单定位有误的问题
- ¥15 如何在maya程序中利用python编写领子和褶裥的模型的方法
- ¥15 Linux权限管理相关操作(求解答)
- ¥15 Bug traq 数据包 大概什么价
- ¥15 在anaconda上pytorch和paddle paddle下载报错
- ¥25 自动填写QQ腾讯文档收集表
- ¥15 DbVisualizer Pro 12.0.7 sql commander光标错位 显示位置与实际不符
- ¥15 android 打包报错
- ¥15 关于stm32的问题
- ¥15 ncode振动疲劳分析中,noisefloor如何影响PSD函数?