使用QMdiArea遇到一些问题

大树学长 2020-08-03 11:18:24

Dialog1 *dlg = new Dialog1(this);
ui->mdiArea->addSubWindow(dlg)->resize(200,200);
//ui->mdiArea->tileSubWindows();
//ui->mdiArea->cascadeSubWindows();

dlg->show();

因为我使用的是自己创建的对话框,Dialog1 ,基类是QDialog,然后放在MdiArea中的,这样是为了更方便使用

问题:弹出的对话框摆放问题
看我上面的代码就知道我已经使用了两种方法,但是创建出来的子窗口摆放方式都不是我想要的
使用tileSubWindows

使用cascadeSubWindows

两个都不用

而我想要的摆放方式是

网上查了半天也没有解决,看看大神有没有什么好的建议


...全文
2426 3 打赏 收藏 转发到动态 举报
写回复
用AI写文章
3 条回复
切换为时间正序
请发表友善的回复…
发表回复
mideum 2020-08-03
  • 打赏
  • 举报
回复
第一个问题,你要理解你的Dialog是被包装在一个QMdiSubWindow里面了,所以对它设置windowHint是没有用的,要对QMdiSubWindow设置才可以
你可以选择:
1. 在addSubWindow时设置windowFlags
ui->mdiArea->addSubWindow(dlg, Qt::WindowSystemMenuHint)

2. 在addSubWindow后设置windowFlags
QMdiSubWindow *sub = ui->mdiArea->addSubWindow(dlg);
sub->setWindowFlags(sub->windowFlags()&~Qt::WindowMinMaxButtonsHint);


第二个问题,你的目标似乎就是cascadeSubWindows,只是略有差别。
cascadeSubWindows会将子窗口resize到它的sizeHint()大小,所以如果你不希望缩到看不见,需要保证sizeHint()的返回值是你所希望的。
一般我们如果用layout来做界面,sizeHint()经常是可以不用管的,但是如果不行的话,你的Dialog1需要重载sizeHint()方法
大树学长 2020-08-03
  • 打赏
  • 举报
回复
问题都自己解决了
晋晔 2022-11-14
  • 举报
回复
@大树学长 大树学长,你的摆放方式是怎么解决的呢,感谢

16,238

社区成员

发帖
与我相关
我的任务
社区描述
Qt 是一个跨平台应用程序框架。通过使用 Qt,您可以一次性开发应用程序和用户界面,然后将其部署到多个桌面和嵌入式操作系统,而无需重复编写源代码。
社区管理员
  • Qt
  • 亭台六七座
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧