我看到它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)