QT Advanced Docking-System: Wie füge ich versteckte/geschlossene QTWidgets hinzu?
Posted: 16 Jan 2025, 08:19
Ich verwende das QT Advanced Docking System https://github.com/githubuser0xFFFF/Qt- ... ing-System, das ziemlich ausgereift zu sein scheint.
Ich habe diesen Code dazu Füge QWidgets zum CDockManager hinzu und erstelle dann einen Link zum ViewMenu, damit ich die Anzeige ein- und ausschalten kann. Wenn ich ein QWidget hinzufüge, wird es direkt danach im Canvas angezeigt.
Es gelingt mir jedoch nicht, ein QWidget hinzuzufügen, das nicht direkt angezeigt wird.
Ich habe diesen Code dazu Füge QWidgets zum CDockManager hinzu und erstelle dann einen Link zum ViewMenu, damit ich die Anzeige ein- und ausschalten kann. Wenn ich ein QWidget hinzufüge, wird es direkt danach im Canvas angezeigt.
Code: Select all
#include
//---------------------------------------------------------------------------
cTestWidget::cTestWidget(QWidget *parent) :
QWidget(parent),
m_DockManager(),
m_Ui(new Ui::TestWidget),
m_MenuBar(nullptr),
m_ViewMenu(nullptr),
//---------------------------------------------------------------------------
{
m_Ui->setupUi(this);
m_MenuBar = new QMenuBar(this);
m_ViewMenu = m_MenuBar->addMenu("View");
this->layout()->setMenuBar(m_MenuBar);
m_DockManager = new ads::CDockManager();
m_Ui->addWidget(m_DockManager);
CreateAndAddDockWidget(new QWidget(this), QString("TestTitel"));
}
//---------------------------------------------------------------------------
void cTestWidget::CreateAndAddDockWidget(QWidget *widget, QString title)
//---------------------------------------------------------------------------
{
m_DockManager->addDockWidgetTab(ads::CenterDockWidgetArea,
CreateDockWidget(widget,
std::move(title)));
}
//---------------------------------------------------------------------------
ads::CDockWidget *cTestWidget::CreateDockWidget(QWidget *widget, QString title)
//---------------------------------------------------------------------------
{
auto dockWidget = new ads::CDockWidget(title);
dockWidget->setWidget(widget, ads::CDockWidget::ForceNoScrollArea);
dockWidget->setMinimumSizeHintMode(ads::CDockWidget::MinimumSizeHintFromContent);
auto action = dockWidget->toggleViewAction();
action->setVisible(false);
m_ViewMenu->addAction(action);
return dockWidget;
}
Code: Select all
//Attempted 1: (isVisible changes back to true, after 'addDockWidgetTab')
//---------------------------------------------------------------------------
void cTestWidget::CreateAndAddDockWidgetHidden(QWidget *widget, QString title)
//---------------------------------------------------------------------------
{
auto dockWidget = CreateDockWidget(widget, std::move(title));
dockWidget->setVisible(false);
m_DockManager->addDockWidgetTab(ads::CenterDockWidgetArea, dockWidget);
}
//Attempted 2: (i get the result which i want,
//but because the widget is displayed for a short time
//after ‘addDockWidgetTab’ it does not look clean)
//---------------------------------------------------------------------------
void cTestWidget::CreateAndAddDockWidgetHidden(QWidget *widget, QString title)
//---------------------------------------------------------------------------
{
m_DockManager->addDockWidgetTab(ads::CenterDockWidgetArea,
CreateDockWidget(widget, title));
m_DockManager->findDockWidget(title)->toggleView(false);
}