QMdiArea
タブ表示モードがあることがわかりました。メイン ウィンドウを 2 つのウィジェットで分割し、QMdiArea
それぞれの間でタブをドラッグ アンド ドロップできるようにしたいと考えています。QTabWidget
カスタムタブバーを設定できる簡単な場所で、すでにそれを行っています。同時に、QMdiArea
表示モードを切り替えたいので、使用することQTabWidget
はできません。しかし、 内にカスタム タブ バーを設定する方法が見当たりませんQMdiArea
。それができるという希望はまだあります。誰でも何か提案できますか?
Qt 4.8 のテスト済みソリューション (編集)
しばらく調査した後、次の解決策を提案できます。を継承する新しいクラスを作成する必要がありますQMdiArea
。ビュー モードをTabbedView
に設定して、標準QTabBar
を 内で構築できるようにしますQMdiArea
。次に、すべての子を取得し、 でQTabBar
ウィジェットを見つけますQString(QObject::metaObject()->className()) == "QTabBar"
。隠します。モードのドキュメントの上に空白の領域が表示されTabbedView
ます。カスタム タブ バーを構築し、それをカスタム mdi 領域に再親化します。サブウィンドウとタブがアクティブ化されたときに発生して使用されるシグナルとスロットを接続します。カスタム タブ バーをカスタム mdi 領域のクラス メンバーとして持つことができます。
この投稿が役に立ったと思ったら、投票してください。ありがとう。
たとえば、いくつかのコード。
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; } }
再親化:
m_pTabBar->setParent(m_pMdiArea);
隠蔽:
if (m_pMdiAreaTabBar != 0) m_pMdiAreaTabBar->hide();
使用される信号とスロット:
QMdiArea::subWindowActivated(QMdiSubWindow*)
、QTabBar::currentChanged(int)