Использовать пользовательскую панель вкладок с QMdiArea

Я вижу это QMdiArea имеет режим просмотра с вкладками. Я хочу иметь возможность разделить главное окно с двумя 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. Reparent:

    m_pTabBar->setParent(m_pMdiArea);
    
  3. Прячется:

    if (m_pMdiAreaTabBar != 0) m_pMdiAreaTabBar->hide();
    
  4. Используемые сигналы и слоты: QMdiArea::subWindowActivated(QMdiSubWindow*), QTabBar::currentChanged(int)

0 ответов

Другие вопросы по тегам