QMdiArea的用途很多,例如我们用的开发环境,都是多文档的 形式,可以用这个类来实现,不过也一些坑,例如标题栏需要自己定制,达不到浏览器那种效果,键盘事件的接收可能需要自己处理,例如, 做一个文本编辑软件,在切换窗口时会触发subWindowActivated信号,然后根据各个子窗口 对象,设置相关属性。
connect(ui.mdiArea, &QMdiArea::subWindowActivated, [=](QMdiSubWindow *pSub) {
FileWindow* pWindow = GetActiveFileWindow();
QList wList = ui.mdiArea->subWindowList();
for (auto window : wList)
{
QWidget* pWidget = (FileWindow*)window->widget();
if (pWidget != pWindow)
{
pWidget->releaseKeyboard();
}
}
if (pWindow != nullptr)
{
pWindow->grabKeyboard();
pWindow->setAttribute(Qt::WA_InputMethodEnabled);
pWindow->setAttribute(Qt::WA_KeyCompression);
pWindow->setFocusPolicy(Qt::WheelFocus);
}
});
如果在子窗口中调用了grabKeyboard, 切换后要 releaseKeyboar