Ich habe eine einfache QWidget
in einer QDockWidget
und meine eigene Titelleiste für dieses Dock-Widget. In diesem Titelleiste, habe ich eine QPushButton
die, wenn sie ausgelöst wird, mir erlauben, wird:Verstecke das Widget eines QDockWidget und setze gleichzeitig die vertikale Titelleiste
- stellen Sie die Titelleiste vertikale
- das Widget in der
QDockWidget
verstecken ich es geschafft, beide zu bekommen von ihnen funktioniert separat, aber ich kann es nicht schaffen gleichzeitig. Hier
ist der Code für die Titelleiste:
QDockTitleBar::QDockTitleBar(const QString &title, QDockWidget * parent)
: QWidget(parent)
{
pDock = qobject_cast<QSuiteDockWidget*>(parentWidget());
m_pMainLayout = new QHBoxLayout(this);
m_pLabel = new QLabel(title, this);
m_pMainLayout->addWidget(m_pLabel);
m_pMainLayout->addStretch();
m_pToggleButton = new QPushButton(this);
//m_pToggleButton->setIcon(...); // whatever
m_pToggleButton->setFlat(true);
connect(m_pToggleButton, SIGNAL(clicked()), this, SLOT(toggleButtonTriggered()));
m_pMainLayout->addWidget(m_pToggleButton);
}
void QDockTitleBar::resizeEvent(QResizeEvent* event)
{
if (pDock->features() & QDockWidget::DockWidgetVerticalTitleBar)
qDebug() << "I am Vertical";
else
qDebug() << "I am Horizontal";
}
void QDockTitleBar::toggleButtonTriggered()
{
const QDockWidget::DockWidgetFeatures features = pDock->features();
if(features & QDockWidget::DockWidgetVerticalTitleBar)
{
pDock->widget()->show(); // comment this one...
pDock->setFeatures(features^QDockWidget::DockWidgetVerticalTitleBar);
}
else
{
pDock->widget()->hide(); //... and this one : the title bar is set vertical
pDock->setFeatures(features | QDockWidget::DockWidgetVerticalTitleBar);
}
}
In meiner Hauptfunktion:
QDockWidget* dock = new QDockWidget();
dock->setWindowTitle("DOCK");
QDockTitleBar* labelDock = new QDockTitleBar("DOCK", dock);
QWidget* widget = new QWidget(dock);
dock->setTitleBarWidget(labelDock);
dock->setWidget(widget);
addDockWidget(Qt::RightDockWidgetArea, dock);
NB: Wenn ichpDock->widget()->hide()
inpDock->widget()->show()
und umgekehrt zu ändern, ich fast das gewünschte Verhalten, aber das Widget ist ausgeblendet, wenn die Titelleiste horizontal ist (ich möchte, dass es ausgeblendet wird, wenn die Titelleiste vertikal ist) ...
Ich habe auch die resizeEvent()
. Wenn ich die Taste, die Titelleiste horizontal auslösen, die ich habe:
Ich bin Vertikal
Ich bin Horizontal
Ich bin Horizontal
und wenn ich auslösen, sobald die Taste erneut :
Ich bin vertikal
Ich bin
HorizontalIch bin
HorizontalIch bin Horizontal
Kann mir jemand erklären dieses Verhalten und/oder mir sagen, was mache ich falsch und wie kann ich es beheben?
Edit: Ich auf Qt5.6 arbeiten, wenn es ankommt.
Ich konzentriere mich nicht auf die resizeEvent()
aufgerufen wird oder nicht, es ist nur das Verhalten, das nicht das gewünschte ist.Zur Zeit:
1/Wenn ich diesen Code:
if(features & QDockWidget::DockWidgetVerticalTitleBar)
pDock->setFeatures(features^QDockWidget::DockWidgetVerticalTitleBar);
else
pDock->setFeatures(features | QDockWidget::DockWidgetVerticalTitleBar);
Es funktioniert wie es funktionieren soll: die Titelleiste wird vertikal, wenn die Taste ausgelöst wird, und zurück zur Horizontalen, wenn Ich trigge die Taste erneut an. Außerdem wird das Widget immer angezeigt.
2/Wenn ich diesen Code:
if(features & QDockWidget::DockWidgetVerticalTitleBar)
{
pDock->widget()->show();
pDock->setFeatures(features^QDockWidget::DockWidgetVerticalTitleBar);
}
else
{
pDock->widget()->hide();
pDock->setFeatures(features | QDockWidget::DockWidgetVerticalTitleBar);
}
Dann, wenn ich die Taste auslösen, das Widget versteckt ist (wie gewünscht), aber die Titelleiste nicht vertikal eingestellt. Wenn ich die Schaltfläche erneut trigge, wird das Widget angezeigt (wie gewünscht), und die Titelleiste ist immer noch horizontal (scheint normal, da es bei der ersten Auslösung nicht geändert hat).
3/Wenn ich diesen Code (das ist, wo das Verhalten in der Nähe von zu sein scheint, was ich will):
if(features & QDockWidget::DockWidgetVerticalTitleBar)
{
pDock->widget()->hide();
pDock->setFeatures(features^QDockWidget::DockWidgetVerticalTitleBar);
}
else
{
pDock->widget()->show();
pDock->setFeatures(features | QDockWidget::DockWidgetVerticalTitleBar);
}
Dann:
- erste Auslösungen: Titel bar set vertikal (es ist in Ordnung) aber Widget immer noch angezeigt
- zweite Auslösung: Titelleiste zurück zu hori zontal ABER Widget diesmal versteckt
- dritte Auslösung, und nach: Titelleiste vertikal mit Widget angezeigt, dann Titelleiste horizontal mit Widget versteckt. Ich möchte das Gegenteil, d. H. Titelleiste vertikal/Widget versteckt und Titelleiste horizontal/Widget angezeigt.
Das Problem ist nicht auf die resizeEvent() aufgerufen wird oder nicht, es ist auf das Verhalten meiner Dock-Widget. Im Moment kann ich das Widget zwar verstecken/anzeigen, aber ich kann die Titelleiste nicht entsprechend einstellen. Ich werde meine Frage bearbeiten, da sie falsch interpretiert zu sein scheint. – IAmInPLS