使用带有QMdiArea的自定义标签栏

时间:2013-05-13 20:53:28

标签: c++ qt tabs qt4 qmdiarea

我看到QMdiArea有一个标签式视图模式。我希望能够使用两个QMdiArea小部件拆分主窗口,并能够在每个小部件之间拖放标签。我已经用一个简单的QTabWidget完成了它,我可以设置自定义标签栏。同时我想切换QMdiArea查看模式,因此使用QTabWidget不是我的选择。但我没有看到任何方法在QMdiArea中设置自定义标签栏。我仍然希望能够做到。有谁能提出建议?

Qt 4.8(编辑)

的测试解决方案

经过一段时间的研究,我可以建议以下解决方案。您必须创建一个继承QMdiArea的新类。将其查看模式设置为TabbedView,以便在QTabBar内构建标准QMdiArea。然后让所有孩子找到QTabBar小部件QString(QObject::metaObject()->className()) == "QTabBar"。把它藏起来。您将在TabbedView模式下获得文档上方的空白区域。构建自定义选项卡栏并将其重新显示到您的自定义mdi区域。连接在激活子窗口和选项卡时触发和使用的信号和插槽。您可以将自定义标签栏作为自定义mdi区域的类成员。

如果您发现这篇文章有用,请投票。感谢。

例如,某些代码。

  1. 在构造函数中的自定义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;
    }
    }
    
  2. 重新设置父级:

    m_pTabBar->setParent(m_pMdiArea);
    
  3. 隐藏:

    if (m_pMdiAreaTabBar != 0) m_pMdiAreaTabBar->hide();
    
  4. 信号&amp;使用的广告位:QMdiArea::subWindowActivated(QMdiSubWindow*)QTabBar::currentChanged(int)

0 个答案:

没有答案