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区域的类成员
如果你觉得这篇文章有用,请投票表决。谢谢
例如,一些代码
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();