我看到
QMdiArea
有选项卡式视图模式。我希望能够用两个 QMdiArea
小部件分割主窗口,并能够在每个小部件之间拖放选项卡。
我已经用一个简单的
QTabWidget
完成了它,我可以在其中设置自定义选项卡栏。同时我想切换 QMdiArea
视图模式,因此使用 QTabWidget
对我来说不是一个选择。但我在QMdiArea
中没有看到任何设置自定义选项卡栏的方法。
这怎么办?
答案由Dmitry K提供。
你必须创建一个新类继承
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();
使用的信号和插槽:
QMdiArea::subWindowActivated(QMdiSubWindow*)
、QTabBar::currentChanged(int)