你好,请问用Qt怎么实现一个在前端显示的非模态窗口,要能设置窗口的位置,谢谢大神

 我来答
cooke1234
2015-12-12 · TA获得超过6861个赞
知道大有可为答主
回答量:4617
采纳率:72%
帮助的人:3546万
展开全部
显示非模态窗体:
myDlg.setModal(false);
myDlg.show();
改变窗体位置用setGeometry();
更多追问追答
追问

我现在有一个子窗口,属性设置为setWindowFlags( Qt::FramelessWindowHint | Qt::Dialog | Qt::WindowStaysOnTopHint), 刚开始是隐藏的,现在通过一个按钮让它显示出来,但是我发现我不能让它到正确的位置上了。。试了mapToGlobal,mapToParent等函数,没法实现,我想问这个窗口的位置应该怎么调整?谢谢

追答
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有效,控件就不能在布局里。
如果使用了布局,控件大小有布局自动控制。
来自:求助得到的回答
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式