我看到它QMdiArea有一个选项卡式视图模式。我希望能够用两个QMdiArea小部件拆分主窗口,并能够在每个小部件之间拖放选项卡。我已经用一个简单的方法完成了它QTabWidget,我可以在其中设置自定义标签栏。同时我想切换QMdiArea视图模式,因此使用QTabWidget不是我的选择。但我没有看到任何在QMdiArea. 我仍然希望它可以完成。任何人都可以提出一些建议吗?
Qt 4.8 的测试解决方案(编辑)
经过一段时间的研究,我可以提出以下解决方案。您必须创建一个新类继承QMdiArea. 将其视图模式设置为TabbedView以使标准QTabBar在QMdiArea. 然后获取所有孩子并找到QTabBar带有QString(QObject::metaObject()->className()) == "QTabBar". 把它藏起来。TabbedView在模式下,您将在文档上方获得一个空白区域。构建您的自定义标签栏并将其重新设置为您的自定义 mdi 区域。连接子窗口和选项卡激活时触发和使用的信号和插槽。您可以将自定义选项卡栏作为自定义 mdi 区域的类成员。
如果你觉得这篇文章有用,请投票。谢谢。
例如一些代码。
QTabBar在其构造函数的自定义 mdi 区域内寻找标准:m_pMdiAreaTabBar = NULL; m_pMdiArea->setViewMode(QMdiArea::TabbedView); QObjectList listChildren = m_pMdiArea->children(); for (QObjectList::Iterator i = listChildren.begin(); i != listChildren.end(); ++i) { if (QString((*i)->metaObject()->className()) == "QTabBar") { m_pMdiAreaTabBar = dynamic_cast<QTabBar*>(*i); break; } }重生:
m_pTabBar->setParent(m_pMdiArea);隐藏:
if (m_pMdiAreaTabBar != 0) m_pMdiAreaTabBar->hide();使用的信号和插槽:
QMdiArea::subWindowActivated(QMdiSubWindow*),QTabBar::currentChanged(int)