我看到QMdiArea
有一个标签式视图模式。我希望能够使用两个QMdiArea
小部件拆分主窗口,并能够在每个小部件之间拖放标签。我已经用一个简单的QTabWidget
完成了它,我可以设置自定义标签栏。同时我想切换QMdiArea
查看模式,因此使用QTabWidget
不是我的选择。但我没有看到任何方法在QMdiArea
中设置自定义标签栏。我仍然希望能够做到。有谁能提出建议?
经过一段时间的研究,我可以建议以下解决方案。您必须创建一个继承QMdiArea
的新类。将其查看模式设置为TabbedView
,以便在QTabBar
内构建标准QMdiArea
。然后让所有孩子找到QTabBar
小部件QString(QObject::metaObject()->className()) == "QTabBar"
。把它藏起来。您将在TabbedView
模式下获得文档上方的空白区域。构建自定义选项卡栏并将其重新显示到您的自定义mdi区域。连接在激活子窗口和选项卡时触发和使用的信号和插槽。您可以将自定义标签栏作为自定义mdi区域的类成员。
如果您发现这篇文章有用,请投票。感谢。
例如,某些代码。
在构造函数中的自定义mdi区域内查找标准QTabBar
:
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();
信号&amp;使用的广告位:QMdiArea::subWindowActivated(QMdiSubWindow*)
,QTabBar::currentChanged(int)