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. QScrollArea breaks layout

QScrollArea breaks layout

Scheduled Pinned Locked Moved General and Desktop
4 Posts 2 Posters 1.9k 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.
  • W Offline
    W Offline
    witheld
    wrote on last edited by
    #1

    In the below code, for some reason putting the QScrollArea in the layout of the widget to the far left causes an unrelated widget to dissapear and two spaces to appear on the sides of the main layout(when you expand the window )

    @

    #include <QtGui>
    #include <QApplication>
    #include <QtCore>
    #include <QtWidgets>
    #include <stdint.h>
     
     
     
     
    int main(int argc, char *argv[])
        {
        QApplication app(argc, argv);
        QWidget *window = new QWidget;
            window->setWindowTitle("TOX");
        QHBoxLayout *layout = new QHBoxLayout;
            layout->setContentsMargins(0, 0, 0, 0);
            layout->setSpacing(0);
     
       QWidget *leftbar = new QWidget();
            leftbar->setStyleSheet("background-color:rgb(28, 28, 28)");
            leftbar->setFixedWidth(300);
            QVBoxLayout *leftbarlayout = new QVBoxLayout;
            leftbarlayout->setContentsMargins(0, 0, 0, 0);
            leftbarlayout->setSpacing(0);
            leftbarlayout->setAlignment(Qt::AlignTop);
                QWidget *statusbar = new QWidget;
                    statusbar->setStyleSheet("background-color:rgb(41, 41, 41)");
                    statusbar->setFixedHeight(100);
                    leftbarlayout->addWidget(statusbar, 0);
                QScrollArea *friendlistscroll = new QScrollArea;
                QWidget *friendlist = new QWidget;
                    friendlistscroll->setWidget(friendlist);
                    friendlist->setStyleSheet("background-color:rgb(28, 28, 28)");
                    leftbarlayout->addWidget(friendlistscroll, 1);
     
                QWidget *leftbuttons = new QWidget;
                    leftbuttons->setStyleSheet("background-color:rgb(28,89,88)");
                    leftbuttons->setFixedHeight(40);
                    leftbarlayout->addWidget(leftbuttons, 2);
                leftbar->setLayout(leftbarlayout);
        QWidget *chat = new QWidget;
            chat->setStyleSheet("background-color:rgb(255,255,255)");
     
        QWidget *rightbar = new QWidget();
            rightbar->setFixedWidth(170);
            rightbar->setMinimumHeight(50);
            QBoxLayout *rightbarlayout = new QVBoxLayout;
            rightbarlayout->setContentsMargins(0,0,0,0);
            rightbarlayout->setSpacing(0);
            rightbarlayout->setAlignment(Qt::AlignBottom);
                QWidget *rightbuttons = new QWidget;
                    rightbuttons->setStyleSheet("background-color:rgb(85, 27, 27)");
                    rightbuttons->setFixedHeight(80);
                    rightbarlayout->addWidget(rightbuttons);
     
                rightbar->setLayout(rightbarlayout);
     
        layout->addWidget(leftbar);
        layout->addWidget(chat);
     
        layout->addWidget(rightbar);
        window->setLayout(layout);
        window->show();
        return app.exec&#40;&#41;;
     
     
    }
    

    @

    1 Reply Last reply
    0
    • C Offline
      C Offline
      ChrisW67
      wrote on last edited by
      #2

      The chat widget is allocated no space if the window.width() is less than the sum of the fixed widths of the left and right bars. By default, all three widgets are allocated equal horizontal space in "layout" if the window is wide enough. The two fixed width bars are shown in the middle of their horizontal space allocation, leaving space to the left and right. The chat widget has a zero-width size hint and "disappears".

      You probably want to set the stretch factors to make all the new space go to the chat widget (the only non-fixed width one):
      @
      layout->setStretchFactor(leftbar, 0);
      layout->setStretchFactor(chat, 1);
      layout->setStretchFactor(rightbar, 0);
      @
      You'll find the chat widget gets a size then also.

      1 Reply Last reply
      0
      • W Offline
        W Offline
        witheld
        wrote on last edited by
        #3

        I did what you said, I think, I set a minimum width to chat and applied that stretch factor, this causes the UI to look correct when it's opened.
        However, when I resize the window, the chat area refuses to stretch, and causes those spaces to appear again

        1 Reply Last reply
        0
        • C Offline
          C Offline
          ChrisW67
          wrote on last edited by
          #4

          Insert the three lines above immediately before line 64 of your example and do nothing else.

          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