Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/kubernetes/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 将自定义选项卡栏与QMdiArea一起使用_C++_Qt_Tabs_Qt4_Qmdiarea - Fatal编程技术网

C++ 将自定义选项卡栏与QMdiArea一起使用

C++ 将自定义选项卡栏与QMdiArea一起使用,c++,qt,tabs,qt4,qmdiarea,C++,Qt,Tabs,Qt4,Qmdiarea,我看到QMdiArea有一个选项卡式视图模式。我希望能够使用两个QMdiArea小部件拆分主窗口,并能够在每个小部件之间拖放选项卡。我已经用一个简单的QTabWidget完成了,在这里我可以设置自定义选项卡栏。同时,我想切换QMdiArea查看模式,因此使用QTabWidget不是我的选择。但是我没有看到在QMdiArea中设置自定义选项卡栏的任何方法。我仍然希望能做到这一点。有人能提出一些建议吗 Qt 4.8的测试解决方案(编辑) 经过一段时间的研究,我可以提出以下解决方案。您必须创建一个继承

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

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

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

例如,一些代码

  • 正在其构造函数中的自定义mdi区域中查找标准
    QTabar

    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;
    }
    }
    
  • 隐藏:

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


  • 我想我有一个解决办法。我发现可以通过QMdiArea.findChild(QtGui.QTabBar)获取选项卡栏。所以我可以把它藏起来。然后,我可以在一个简单的小部件中混合使用QMdiArea和一个定制选项卡栏。我还可以提供QMdiArea和选项卡栏的接口。我想那就行了。我必须退房。必须在qt项目上发布此解决方法。你知道,qt就是这样一个构造函数。注意,
    QMdiArea
    QTabBar
    子小部件是应请求构造的,例如,当您将
    QMdiArea
    的查看模式设置为
    TabView
    时。相对于QTabWidget,选项卡式QMdiArea有哪些优点?@Riateche您可以允许用户在所需的“开箱即用”模式之间切换。有很多关于这个的练习。有时候我喜欢深入研究一些东西,不管它是否有用,或者根本不值得一试,尝试,测试,看看它是如何为自己工作的。
    if (m_pMdiAreaTabBar != 0) m_pMdiAreaTabBar->hide();