7

QMdiAreaタブ表示モードがあることがわかりました。メイン ウィンドウを 2 つのウィジェットで分割し、QMdiAreaそれぞれの間でタブをドラッグ アンド ドロップできるようにしたいと考えています。QTabWidgetカスタムタブバーを設定できる簡単な場所で、すでにそれを行っています。同時に、QMdiArea表示モードを切り替えたいので、使用することQTabWidgetはできません。しかし、 内にカスタム タブ バーを設定する方法が見当たりませんQMdiArea。それができるという希望はまだあります。誰でも何か提案できますか?

Qt 4.8 のテスト済みソリューション (編集)

しばらく調査した後、次の解決策を提案できます。を継承する新しいクラスを作成する必要がありますQMdiArea。ビュー モードをTabbedViewに設定して、標準QTabBarを 内で構築できるようにしますQMdiArea。次に、すべての子を取得し、 で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