Использовать пользовательскую панель вкладок с 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)

4

Решение

Задача ещё не решена.

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]