Unsolved Toolbar spacer does not expand to the right corner
-
- Did you try the minimal example above?
- What version of Qt are you using?
- Do you customise any of the widgets on the right of the spacer?
- if you give
QSizePolicy::Expanding
or minimum sizes to them they will be respected
- if you give
-
@VRonin I did try to include the spacer just like you do in your minimal example, but the problem is still there, therefore the issue might be somewhere else. I am working with Qt version 5.15.
This is all I have to the right of the spacer:
m_fileToolBar->addWidget(new QLabel(tr(" Style:"))); QAction* stylesAction = m_fileToolBar->addWidget(createComboBoxStyle()); stylesAction->setToolTip(tr("Styles switcher")); m_fileToolBar->addSeparator(); m_fileToolBar->addAction(m_aboutAction);
Where m_fileToolBar is my toolBar and 2 actions as well as a separator and a label are added (these can be seen in the picture included in the original post).
-
I suspect the problem is not with the spacer widget but with something else in your code.
We need to narrow down the list of suspects.
Please answer the point 1 above and, in addition:- what is the body of
createComboBoxStyle
? - how do you create
m_aboutAction
?
- what is the body of
-
Hi
Just as a note.
You could apply a style sheetspacer->setStyleSheet("QWidget{ background-color: rgb(178, 255, 34);}");
so its clear how it's placed.
-
@VRonin ok so I have tried creating a new project with your minimal example and that works perfectly! The problem is now understanding what's causing the issue in my project.
-
m_styleSwitcher = new QComboBox(this);
m_styleSwitcher->addItem(m_defaultStyleAction->text(), Default);
m_styleSwitcher->addItem(m_fusionStyleAction->text(), Fusion);
m_styleSwitcher->addItem(QStringLiteral("VisualStudio2019 ") + m_themeBlueAction->text(), VS2019Blue);
m_styleSwitcher->addItem(QStringLiteral("VisualStudio2019 ") + m_themeDarkAction->text(), VS2019Dark);
m_styleSwitcher->addItem(QStringLiteral("VisualStudio2019 ") + m_themeLightAction->text(), VS2019Light);
m_styleSwitcher->setCurrentIndex(static_cast<int>(m_appStyle));
connect(m_styleSwitcher, SIGNAL(currentIndexChanged(int)), this, SLOT(styleIndexChanged(int)));
return m_styleSwitcher; -
m_aboutAction is created in the .h file:
QAction* m_aboutAction;
-
-
@mrjj This might actually help understanding the cause of the issue. I have applied the style sheet to the spacer. When the window is in full screen mode I can correctly see the spacer object:
While having the application in a smaller window I do not see the style sheet:
-
@TommyTLC
Ok so does it go into the >> or is then completely gone ? -
@mrjj in the >> I only see my m_aboutAction. It looks like the spacer disappears when the application is not in full screen.
-
@TommyTLC
That i have not seen before. :)
Could you give your spacer object a name with setObjectName and
then do
ui->menubar->dumpObjectTree();
(adjust to name)Then it will show all its sub objexts like
QMenuBar::menubar QToolButton::qt_menubar_ext_button QMenu::menuMENU QAction:: QMenu::menuMENU2 QAction:: QMenu::menuMENU3 QAction::
just to see if its still in or really gone. Its kinda hard for a widget to just fall off as it's owned by the parent.
-
@mrjj This is what I have done:
spacer->setObjectName("spacerName");
ui->m_fileToolBar->dumpObjectTree();It looks like this function does not allow the use of "ui". If I follow the error's suggestion and use a pointer type toward m_fileToolBar I get another error saying that m_fileToolBar is not a member of the Ui::MainWindow class.
-
Hi
the name m_fileToolBar suggest to me its not in a UI
so its just
m_fileToolBar->dumpObjectTree(); -
@mrjj Thank you! Here's the output (I have given my spacer object the name "spacerName"):
Qtitan::DockToolBar::
Qtitan::DockToolBarLayout::
Qtitan::DockToolBarExtension::
QMenu::
QAction::
Qtitan::ToolButton::
QWidgetAction::
QLineEdit::
QWidgetLineControl::
Qtitan::ToolButton::
QWidgetAction::
QSpinBox::
QLineEdit::qt_spinbox_lineedit
QWidgetLineControl::
QValidator::qt_spinboxvalidator
Qtitan::ToolButton::
QWidgetAction::
QWidget::spacerName -
@TommyTLC
Ok so it is still there :)
Then i would
qDebug() << "size" << qDebug() << spacer->geometry();
and it will show something like
QRect(747,339 75x23)as it could be fun to see its location and size.
-
@mrjj This is where my spacer is located/its size: QRect(0,0 1180x480)
-
@TommyTLC
so its at o,0 and 1180 wide o.O and almost 500 in height.
but we clearly dont see that.
can you try
qDebug() << "vis" << spacer->isVisible();i was wondering if this happens due to
spacer->setMinimumWidth(1180);
as i have seen widgets do odd stuff when not room enough. -
@mrjj vis false
-
@TommyTLC
ok so its get hidden for some odd reason.
do you use the do anything to the spacer variable after it has been inserted ?
also try
spacer->show();
after its gone. ( like via a button)
and lets see what happens. -
@mrjj This is all I do with the spacer:
QWidget* spacer = new QWidget(); spacer->setSizePolicy(QSizePolicy::Expanding, QSizePolicy::Preferred); spacer->setMinimumWidth(1180); m_fileToolBar->addWidget(spacer);
it gets created, I set the SizePolicy and the minimumWidth and then I assign it to the toolBar.
-
@TommyTLC
Ok so its not hidden by user code.
Could you try a smaller minimum and see like
spacer->setMinimumWidth(200);I know its not the goal but just to see if it still happens.
-
@TommyTLC said in Toolbar spacer does not expand to the right corner:
in the >> I only see my m_aboutAction
you do not see the style combo either?
Did you overload
resizeEvent
?Does the "Configuration" label on the left have something special?