Skip to content
  • Categories
  • Recent
  • Tags
  • Popular
  • Users
  • Groups
  • Search
  • Get Qt Extensions
  • Unsolved
Collapse
Brand Logo
  1. Home
  2. Qt Development
  3. General and Desktop
  4. Toolbar spacer does not expand to the right corner
Forum Updated to NodeBB v4.3 + New Features

Toolbar spacer does not expand to the right corner

Scheduled Pinned Locked Moved Unsolved General and Desktop
34 Posts 5 Posters 5.0k Views 2 Watching
  • Oldest to Newest
  • Newest to Oldest
  • Most Votes
Reply
  • Reply as topic
Log in to reply
This topic has been deleted. Only users with topic management privileges can see it.
  • T Offline
    T Offline
    TommyTLC
    wrote on last edited by
    #1

    Hello everyone this is my first post,

    I have been trying to set some of my items to the right of a toolbar. By searching for a solution I understand that the general methodology would be to create a spacer and set its size policy to Expanding. However by doing so I am only able to create a small gap between my items(shown between Configuration and Style):

    small spacing.PNG

    If I try to change its minimum size I apparently obtain my expected result, but this has the format I want only in full-screen.

    wanted result.PNG

    If I try resizing the window, the items to the right of the toolbar disappear and therefore the spacer does not adjust to the correct size, keeping the items to the right hidden.

    hidden items.PNG

    This is how I set up my spacer:

    QWidget* spacer = new QWidget();
    spacer->setSizePolicy(QSizePolicy::Expanding, QSizePolicy::Preferred);
    spacer->setMinimumWidth(1180);
    m_fileToolBar->addWidget(spacer);
    

    My main goal is to have all items showing up in the toolbar no matter the window size.
    Could someone please help me? Thank you all in advance. (I'm working with C++)

    JonBJ 1 Reply Last reply
    0
    • T TommyTLC

      Hello everyone this is my first post,

      I have been trying to set some of my items to the right of a toolbar. By searching for a solution I understand that the general methodology would be to create a spacer and set its size policy to Expanding. However by doing so I am only able to create a small gap between my items(shown between Configuration and Style):

      small spacing.PNG

      If I try to change its minimum size I apparently obtain my expected result, but this has the format I want only in full-screen.

      wanted result.PNG

      If I try resizing the window, the items to the right of the toolbar disappear and therefore the spacer does not adjust to the correct size, keeping the items to the right hidden.

      hidden items.PNG

      This is how I set up my spacer:

      QWidget* spacer = new QWidget();
      spacer->setSizePolicy(QSizePolicy::Expanding, QSizePolicy::Preferred);
      spacer->setMinimumWidth(1180);
      m_fileToolBar->addWidget(spacer);
      

      My main goal is to have all items showing up in the toolbar no matter the window size.
      Could someone please help me? Thank you all in advance. (I'm working with C++)

      JonBJ Offline
      JonBJ Offline
      JonB
      wrote on last edited by
      #2

      @TommyTLC
      Maybe you need it because you are using a toolbar, I don't know. but why are you using a QWidget* spacer? Should/can you use a layout on the toolbar and use QSpacerItem, or more generally just QBoxLayout::addSpacing()? Maybe @VRonin's post at https://forum.qt.io/topic/65574/qtoolbar-widgets-spacing/2 indicates the approach?

      T 1 Reply Last reply
      0
      • JonBJ JonB

        @TommyTLC
        Maybe you need it because you are using a toolbar, I don't know. but why are you using a QWidget* spacer? Should/can you use a layout on the toolbar and use QSpacerItem, or more generally just QBoxLayout::addSpacing()? Maybe @VRonin's post at https://forum.qt.io/topic/65574/qtoolbar-widgets-spacing/2 indicates the approach?

        T Offline
        T Offline
        TommyTLC
        wrote on last edited by
        #3

        @JonB Thank you for your reply. I have tried applying @VRonin 's method, but the situation that is created is still the same: some space is added to the toolbar, but the items to the far right are hidden when the window is not in full-screen.

        How would the other process you mentioned work? I have created a QSpacerItem this way:

        QSpacerItem* spacerItem;
        spacerItem->addSpacing();

        But I am not able to use addSpacing() as it's not a member of QSpacerItem.

        1 Reply Last reply
        0
        • VRoninV Offline
          VRoninV Offline
          VRonin
          wrote on last edited by VRonin
          #4

          Can't replicate the problem using Qt 5.15 or 6.0
          See minimal example below:

          #include <QApplication>
          #include <QMainWindow>
          #include <QToolBar>
          #include <QLabel>
          #include <QSpinBox>
          #include <QLineEdit>
          #include <QComboBox>
          int main(int argc, char *argv[])
          {
              QApplication app(argc,argv);
              QMainWindow wid;
              QToolBar* toolBar = new QToolBar;
              toolBar->addWidget(new QLabel("3DViewver"));
              toolBar->addWidget(new QLineEdit);
              toolBar->addWidget(new QLabel("OpenGL"));
              toolBar->addWidget(new QSpinBox);
              toolBar->addWidget(new QLabel("Configuration"));
              QWidget* spacer = new QWidget();
              spacer->setSizePolicy(QSizePolicy::Expanding, QSizePolicy::Expanding);
              toolBar->addWidget(spacer);
              toolBar->addWidget(new QLabel("Style"));
              toolBar->addWidget(new QComboBox);
              wid.addToolBar(toolBar);
              wid.show();
              return app.exec();
          }
          

          "La mort n'est rien, mais vivre vaincu et sans gloire, c'est mourir tous les jours"
          ~Napoleon Bonaparte

          On a crusade to banish setIndexWidget() from the holy land of Qt

          1 Reply Last reply
          2
          • T Offline
            T Offline
            TommyTLC
            wrote on last edited by
            #5

            Another method I have tried to fix my problem with is having 2 toolbars; one with the left-to-right items and another one with the right-to-lefts ones. The issue I'm having with this is being able to dock toolbar2 to the right of toolbar1 so that they can both be on the same line. I can dock toolbar2 to the Top, but that means having it right below toolbar1. The problem here is not being able to specify the docking area by comparing the two toolbars.

            1 Reply Last reply
            0
            • T Offline
              T Offline
              TommyTLC
              wrote on last edited by
              #6

              @VRonin Thanks for your reply. Unfortunately I am still having the same issue where generating a spacer widget only adds a little bit of space between the items in the toolbar.

              VRoninV 1 Reply Last reply
              0
              • T TommyTLC

                @VRonin Thanks for your reply. Unfortunately I am still having the same issue where generating a spacer widget only adds a little bit of space between the items in the toolbar.

                VRoninV Offline
                VRoninV Offline
                VRonin
                wrote on last edited by VRonin
                #7
                1. Did you try the minimal example above?
                2. What version of Qt are you using?
                3. 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

                "La mort n'est rien, mais vivre vaincu et sans gloire, c'est mourir tous les jours"
                ~Napoleon Bonaparte

                On a crusade to banish setIndexWidget() from the holy land of Qt

                T 1 Reply Last reply
                2
                • VRoninV VRonin
                  1. Did you try the minimal example above?
                  2. What version of Qt are you using?
                  3. 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
                  T Offline
                  T Offline
                  TommyTLC
                  wrote on last edited by
                  #8

                  @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).

                  1 Reply Last reply
                  0
                  • VRoninV Offline
                    VRoninV Offline
                    VRonin
                    wrote on last edited by VRonin
                    #9

                    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:

                    1. what is the body of createComboBoxStyle?
                    2. how do you create m_aboutAction?

                    "La mort n'est rien, mais vivre vaincu et sans gloire, c'est mourir tous les jours"
                    ~Napoleon Bonaparte

                    On a crusade to banish setIndexWidget() from the holy land of Qt

                    T 1 Reply Last reply
                    1
                    • mrjjM Offline
                      mrjjM Offline
                      mrjj
                      Lifetime Qt Champion
                      wrote on last edited by
                      #10

                      Hi
                      Just as a note.
                      You could apply a style sheet

                      spacer->setStyleSheet("QWidget{ background-color: rgb(178, 255, 34);}");

                      so its clear how it's placed.

                      T 1 Reply Last reply
                      1
                      • VRoninV VRonin

                        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:

                        1. what is the body of createComboBoxStyle?
                        2. how do you create m_aboutAction?
                        T Offline
                        T Offline
                        TommyTLC
                        wrote on last edited by
                        #11

                        @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.

                        1. 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;

                        2. m_aboutAction is created in the .h file:

                          QAction* m_aboutAction;

                        1 Reply Last reply
                        1
                        • mrjjM mrjj

                          Hi
                          Just as a note.
                          You could apply a style sheet

                          spacer->setStyleSheet("QWidget{ background-color: rgb(178, 255, 34);}");

                          so its clear how it's placed.

                          T Offline
                          T Offline
                          TommyTLC
                          wrote on last edited by
                          #12

                          @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:

                          visible spacer.PNG

                          While having the application in a smaller window I do not see the style sheet:

                          not visible spacer.PNG

                          mrjjM 1 Reply Last reply
                          0
                          • T TommyTLC

                            @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:

                            visible spacer.PNG

                            While having the application in a smaller window I do not see the style sheet:

                            not visible spacer.PNG

                            mrjjM Offline
                            mrjjM Offline
                            mrjj
                            Lifetime Qt Champion
                            wrote on last edited by
                            #13

                            @TommyTLC
                            Ok so does it go into the >> or is then completely gone ?

                            T 1 Reply Last reply
                            0
                            • mrjjM mrjj

                              @TommyTLC
                              Ok so does it go into the >> or is then completely gone ?

                              T Offline
                              T Offline
                              TommyTLC
                              wrote on last edited by
                              #14

                              @mrjj in the >> I only see my m_aboutAction. It looks like the spacer disappears when the application is not in full screen.

                              mrjjM VRoninV 2 Replies Last reply
                              0
                              • T TommyTLC

                                @mrjj in the >> I only see my m_aboutAction. It looks like the spacer disappears when the application is not in full screen.

                                mrjjM Offline
                                mrjjM Offline
                                mrjj
                                Lifetime Qt Champion
                                wrote on last edited by
                                #15

                                @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.

                                T 1 Reply Last reply
                                0
                                • mrjjM mrjj

                                  @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.

                                  T Offline
                                  T Offline
                                  TommyTLC
                                  wrote on last edited by
                                  #16

                                  @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.

                                  mrjjM 1 Reply Last reply
                                  0
                                  • T TommyTLC

                                    @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.

                                    mrjjM Offline
                                    mrjjM Offline
                                    mrjj
                                    Lifetime Qt Champion
                                    wrote on last edited by
                                    #17

                                    Hi
                                    the name m_fileToolBar suggest to me its not in a UI
                                    so its just
                                    m_fileToolBar->dumpObjectTree();

                                    T 1 Reply Last reply
                                    0
                                    • mrjjM mrjj

                                      Hi
                                      the name m_fileToolBar suggest to me its not in a UI
                                      so its just
                                      m_fileToolBar->dumpObjectTree();

                                      T Offline
                                      T Offline
                                      TommyTLC
                                      wrote on last edited by
                                      #18

                                      @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

                                      mrjjM 1 Reply Last reply
                                      0
                                      • T TommyTLC

                                        @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

                                        mrjjM Offline
                                        mrjjM Offline
                                        mrjj
                                        Lifetime Qt Champion
                                        wrote on last edited by
                                        #19

                                        @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.

                                        T 1 Reply Last reply
                                        1
                                        • mrjjM mrjj

                                          @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.

                                          T Offline
                                          T Offline
                                          TommyTLC
                                          wrote on last edited by TommyTLC
                                          #20

                                          @mrjj This is where my spacer is located/its size: QRect(0,0 1180x480)

                                          mrjjM 1 Reply Last reply
                                          0

                                          • Login

                                          • Login or register to search.
                                          • First post
                                            Last post
                                          0
                                          • Categories
                                          • Recent
                                          • Tags
                                          • Popular
                                          • Users
                                          • Groups
                                          • Search
                                          • Get Qt Extensions
                                          • Unsolved