Использовать пользовательскую панель вкладок с QMdiArea
Я вижу это QMdiArea
имеет режим просмотра с вкладками. Я хочу иметь возможность разделить главное окно с двумя 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; } }
Reparent:
m_pTabBar->setParent(m_pMdiArea);
Прячется:
if (m_pMdiAreaTabBar != 0) m_pMdiAreaTabBar->hide();
Используемые сигналы и слоты:
QMdiArea::subWindowActivated(QMdiSubWindow*)
,QTabBar::currentChanged(int)