Qt中关于setGeometry()函数的问题
当我用在不同的窗体的时候发现有不同的形式
QMainWindow 和QWidget都是相对父窗体来说的,可是QDialog用上这个设置位置的函数,却是相对于桌面而言的。但是按照道理,他们都是继承的QWidget,setGeometry这个函数的功能应该是相同的才对呀。如果说QDialog是顶级窗体的话,那么QMainWindow也是顶级窗体,根本就解释不通,有木有人知道这个现象该怎么解释哇!我的dialog的父窗体不是空,是this, 也就是MainWindow或是widget。
正解:
这里是QT文档里的。
Note that QDialog (an any other widget that has type Qt::Dialog) uses the parent widget slightly differently from other classes in Qt. A dialog is always a top-level widget, but if it has a parent, its default location is centered on top of the parent's top-level widget (if it is not top-level itself). It will also share the parent's taskbar entry.
QDialog即使有父窗口也是顶层窗口,所以位置是相对桌面的。但一般使用都是不设置它位置的,默认就是在父窗口中间。要设置相对父窗口的位置就先获得父窗口的全局位置,再相加吧。
*********************
想要setGeometry有效,控件就不能在布局里。
如果使用了布局,控件大小有布局自动控制。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· 单线程的Redis速度为什么快?
· SQL Server 2025 AI相关能力初探
· AI编程工具终极对决:字节Trae VS Cursor,谁才是开发者新宠?
· 展开说说关于C#中ORM框架的用法!