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. Sending a Signal to a Slot when a toolbar is Docked or Undocked
Qt 6.11 is out! See what's new in the release blog

Sending a Signal to a Slot when a toolbar is Docked or Undocked

Scheduled Pinned Locked Moved General and Desktop
6 Posts 2 Posters 4.0k Views 1 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.
  • ? Offline
    ? Offline
    A Former User
    wrote on last edited by
    #1

    Hi here I am agin with a simple question but I can no find the answer in the documentation.
    Basically my application has a Menu, ToolBar and QSpliter.

    For the purpose of this explanation let us say the Splitter hold a TextEditor and a tree Explorer
    My problem is that I want the splitter to occupy the entire real state of the QMainWindow.

    For the I adde and Even Handler that that Recalculate the size of the
    Spliter when the main window is resized and this works very well.

    Basicall I take into accoun the size of the Menu and the ToolBar and subtrabt from the main frame child rectangle.

    The event funtion is like this

    @bool alchemedia::event(QEvent msg)
    {
    switch (msg->type())
    {
    case QEvent::Resize:
    {
    //QResizeEvent
    resize = (QResizeEvent*) msg;
    //QRect rect (frameGeometry());
    QRect rect (childrenRect ());
    if (m_toolBar) {
    int x1;
    int y1;
    int w1;
    int h1;

    int w = m_toolBar->width();
    int h = m_toolBar->height();
    QRect toolBarRect (m_toolBar->rect());
    rect.getRect(&x1, &y1, &w1, &h1);
    
    y1 += h;   
    h1 -= h;
    rect.setRect(x1, y1, w1, h1);
    

    }
    if (m_menubar) {
    int x1;
    int y1;
    int w1;
    int h1;

    int w = m_menubar->width();
    int h = m_menubar->height();
    QRect toolBarRect (m_toolBar->rect());
    rect.getRect(&x1, &y1, &w1, &h1);
    
    y1 += h;   
    h1 -= h;
    rect.setRect(x1, y1, w1, h1);
    

    }

    m_canvas->setGeometry(rect);
    break;
    }

    }

    return QMainWindow::event (msg);
    }@

    However I need an event or call the event function when the ToolBar is undocked
    But I can no figure out how to determine if the ToolBar is docked of Undocked

    I also tried to connect the signal movableChanged to a slot in the main window,
    Like this:

    @// add the tool bars
    m_toolBar = new QToolBar(this);
    m_toolBar->setObjectName(QString::fromUtf8("editToolBar"));
    addToolBar(Qt::TopToolBarArea, m_toolBar);
    connect (m_toolBar, SIGNAL (movableChanged(bool)), this, SLOT (ToolBarbChanged()));@
    But this does not works either. It does not give me any runtime error but my ToolBarbChanged in not called.
    Can some one tell me how can I wire a signal to detrmone when a ToolBar is Undocked?

    1 Reply Last reply
    0
    • G Offline
      G Offline
      giesbert
      wrote on last edited by
      #2

      Hi,

      why don't you use layouts to position the splitter?
      Just set the splitter as centralWidget in the QMainWindow and it will use all client space.

      Nokia Certified Qt Specialist.
      Programming Is Like Sex: One mistake and you have to support it for the rest of your life. (Michael Sinz)

      1 Reply Last reply
      0
      • ? Offline
        ? Offline
        A Former User
        wrote on last edited by
        #3

        Oh Thank you,
        I do not want to use the Horizontal of Vertical Lay Out because I have to add more Panes, and a simple box layout manager is very limiting.
        Basically my application will have more floating/docking, a render Canvas, a Text Window, and Command Panel and maybe some others.
        In MFC this is controlled automatically by a Docking Manager, but QT does not seems to have anything like that, on the other hand QT is much easier to use and more importantly it is cross platform.

        Any way adding the QHBoxLayout did not fix the problem, but I realized that my mistake was that I did not call function setCentralWidget(m_canvas);
        Here is the code

        @// create all menu and toolbars
        CreateMenus();

        // create the main render Canvas
        m_canvas = new alchemediaCanvas (this);
        //QHBoxLayout* horizontalLayout = new QHBoxLayout(m_canvas);
        //horizontalLayout->setObjectName(QString::fromUtf8("horizontalLayout"));
        setCentralWidget(m_canvas);@
        and now is works even without the QHBoxLayout

        Later I may have to craet my won LayOut Manage to emulate the MFC docking Manager, but so far this si very good.
        Thank you.

        1 Reply Last reply
        0
        • G Offline
          G Offline
          giesbert
          wrote on last edited by
          #4

          In Qt, you have docking widgets which perfectly work.
          The central widget gets all the rest of the space that is not used by the docking widgets.

          The default layouts are vbox, hbox, grid.
          For most cases, this should be enough...

          Nokia Certified Qt Specialist.
          Programming Is Like Sex: One mistake and you have to support it for the rest of your life. (Michael Sinz)

          1 Reply Last reply
          0
          • ? Offline
            ? Offline
            A Former User
            wrote on last edited by
            #5

            Oh I am sure Qt can do it, I am not sure I know enough to figure out how.
            It is out of topic but sine you mention it, I was think how to go about that the lay out thing

            For example I played with docking in designer before I started coding and I could not figured out how to set something that behaves like for example Visual Studio, or 3D studio max front end.

            Maybe it is because I am not experience enough, but in any case I am not there yet.
            I hope that by that time I am fluent enough to get some that behave similar.
            For now I have plenty to work on.

            Thank for the help

            1 Reply Last reply
            0
            • ? Offline
              ? Offline
              A Former User
              wrote on last edited by
              #6

              ignore this please

              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