7

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

Qt 4.8 的测试解决方案(编辑)

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

如果你觉得这篇文章有用,请投票。谢谢。

例如一些代码。

  1. 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;
    }
    }
    
  2. 重生:

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

    if (m_pMdiAreaTabBar != 0) m_pMdiAreaTabBar->hide();
    
  4. 使用的信号和插槽:QMdiArea::subWindowActivated(QMdiSubWindow*),QTabBar::currentChanged(int)

4

0 回答 0