将自定义标签栏与 QMdiArea 一起使用

问题描述 投票:0回答:1

我看到

QMdiArea
有选项卡式视图模式。我希望能够用两个
QMdiArea
小部件分割主窗口,并能够在每个小部件之间拖放选项卡。

我已经用一个简单的

QTabWidget
完成了它,我可以在其中设置自定义选项卡栏。同时我想切换
QMdiArea
视图模式,因此使用
QTabWidget
对我来说不是一个选择。但我在
QMdiArea
中没有看到任何设置自定义选项卡栏的方法。

这怎么办?

c++ qt tabs qt4 qmdiarea
1个回答
0
投票

答案由Dmitry K提供。


你必须创建一个新类继承

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. 使用的信号和插槽:

    QMdiArea::subWindowActivated(QMdiSubWindow*)
    QTabBar::currentChanged(int)

最新问题
© www.soinside.com 2019 - 2024. All rights reserved.