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. using QSizePolicy to set size according to content size
Forum Updated to NodeBB v4.3 + New Features

using QSizePolicy to set size according to content size

Scheduled Pinned Locked Moved Unsolved General and Desktop
3 Posts 2 Posters 706 Views
  • 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.
  • DrageFabeldyrD Offline
    DrageFabeldyrD Offline
    DrageFabeldyr
    wrote on last edited by
    #1

    i'm trying to make start/pause menu over the game screen
    it has different text before the game starts and during the pause so i want to change its size depends on situation
    my code is:

        QWidget *menu;
        QVector <QLabel*> menu_cursor_lines;
        QVector <QLabel*> menu_items_lines;
        QHBoxLayout *menu_layout;
        QVBoxLayout *menu_items_layout;
        QVBoxLayout *menu_cursor_layout;
        int menu_lines = 3;
    
    ********************************************************
    
        menu = new QWidget(grview);
        //menu->setSizePolicy(QSizePolicy::Expanding, QSizePolicy::Expanding);
    
        for (int i = 0; i < menu_lines; i++)
        {
            QLabel *menu_cursor_line = new QLabel;
            menu_cursor_line->setFont(f);
            //menu_cursor_line->setSizePolicy(QSizePolicy::Expanding, QSizePolicy::Expanding);
            menu_cursor_lines.append(menu_cursor_line);
            QLabel *menu_item_line = new QLabel;
            menu_item_line->setFont(f);
            //menu_item_line->setSizePolicy(QSizePolicy::Expanding, QSizePolicy::Expanding);
            menu_items_lines.append(menu_item_line);
        }
    
        for (int i = 0; i < menu_lines; i++)
        {
            menu_cursor_lines[i]->setText("");
            //menu_cursor_lines[i]->setSizePolicy(QSizePolicy::Expanding, QSizePolicy::Expanding);
            //menu_items_lines[i]->setText("                                             ");
            menu_items_lines[i]->setText("");
            //menu_items_lines[i]->setSizePolicy(QSizePolicy::Expanding, QSizePolicy::Expanding);
        }
        menu_cursor_lines[0]->setText("➜");
    
        menu_cursor_layout = new QVBoxLayout;
        menu_items_layout = new QVBoxLayout;
        menu_layout = new QHBoxLayout;
    
        menu_cursor_layout->setSpacing(20);
        for (int i = 0; i < menu_cursor_lines.size(); i++)
            menu_cursor_layout->addWidget(menu_cursor_lines[i]);
        menu_items_layout->setSpacing(20);
        for (int i = 0; i < menu_items_lines.size(); i++)
            menu_items_layout->addWidget(menu_items_lines[i]);
        menu_layout->addLayout(menu_cursor_layout);
        menu_layout->addLayout(menu_items_layout);
        menu->setLayout(menu_layout);
        menu->setStyleSheet("background-color: Grey;");
    
    

    commented SetSizePolicies is where i've tried them
    i've tried all possible flags and result was always the same - see pictures
    0_1510305487145_menu1.png
    0_1510305505568_menu2.png

    so is it possible to do this using QSizePolicy or not and if it is so how to do it?

    jsulmJ 1 Reply Last reply
    0
    • DrageFabeldyrD DrageFabeldyr

      i'm trying to make start/pause menu over the game screen
      it has different text before the game starts and during the pause so i want to change its size depends on situation
      my code is:

          QWidget *menu;
          QVector <QLabel*> menu_cursor_lines;
          QVector <QLabel*> menu_items_lines;
          QHBoxLayout *menu_layout;
          QVBoxLayout *menu_items_layout;
          QVBoxLayout *menu_cursor_layout;
          int menu_lines = 3;
      
      ********************************************************
      
          menu = new QWidget(grview);
          //menu->setSizePolicy(QSizePolicy::Expanding, QSizePolicy::Expanding);
      
          for (int i = 0; i < menu_lines; i++)
          {
              QLabel *menu_cursor_line = new QLabel;
              menu_cursor_line->setFont(f);
              //menu_cursor_line->setSizePolicy(QSizePolicy::Expanding, QSizePolicy::Expanding);
              menu_cursor_lines.append(menu_cursor_line);
              QLabel *menu_item_line = new QLabel;
              menu_item_line->setFont(f);
              //menu_item_line->setSizePolicy(QSizePolicy::Expanding, QSizePolicy::Expanding);
              menu_items_lines.append(menu_item_line);
          }
      
          for (int i = 0; i < menu_lines; i++)
          {
              menu_cursor_lines[i]->setText("");
              //menu_cursor_lines[i]->setSizePolicy(QSizePolicy::Expanding, QSizePolicy::Expanding);
              //menu_items_lines[i]->setText("                                             ");
              menu_items_lines[i]->setText("");
              //menu_items_lines[i]->setSizePolicy(QSizePolicy::Expanding, QSizePolicy::Expanding);
          }
          menu_cursor_lines[0]->setText("➜");
      
          menu_cursor_layout = new QVBoxLayout;
          menu_items_layout = new QVBoxLayout;
          menu_layout = new QHBoxLayout;
      
          menu_cursor_layout->setSpacing(20);
          for (int i = 0; i < menu_cursor_lines.size(); i++)
              menu_cursor_layout->addWidget(menu_cursor_lines[i]);
          menu_items_layout->setSpacing(20);
          for (int i = 0; i < menu_items_lines.size(); i++)
              menu_items_layout->addWidget(menu_items_lines[i]);
          menu_layout->addLayout(menu_cursor_layout);
          menu_layout->addLayout(menu_items_layout);
          menu->setLayout(menu_layout);
          menu->setStyleSheet("background-color: Grey;");
      
      

      commented SetSizePolicies is where i've tried them
      i've tried all possible flags and result was always the same - see pictures
      0_1510305487145_menu1.png
      0_1510305505568_menu2.png

      so is it possible to do this using QSizePolicy or not and if it is so how to do it?

      jsulmJ Offline
      jsulmJ Offline
      jsulm
      Lifetime Qt Champion
      wrote on last edited by
      #2

      @DrageFabeldyr Isn't the menu resized automatically if text length changes?

      https://forum.qt.io/topic/113070/qt-code-of-conduct

      DrageFabeldyrD 1 Reply Last reply
      0
      • jsulmJ jsulm

        @DrageFabeldyr Isn't the menu resized automatically if text length changes?

        DrageFabeldyrD Offline
        DrageFabeldyrD Offline
        DrageFabeldyr
        wrote on last edited by DrageFabeldyr
        #3

        @jsulm no, as you see on pictures doesn't matter what text is written the size is minimal
        and as i understand it uses this text to set size:

            for (int i = 0; i < menu_lines; i++)
            {
                menu_cursor_lines[i]->setText("");
                menu_items_lines[i]->setText("");
            }
            menu_cursor_lines[0]->setText("➜");
        

        so as you see from pictures the size is set with the first SetText mention and then doesn't change

        only solution i've found is to write it this way:

            for (int i = 0; i < menu_lines; i++)
            {
                menu_cursor_lines[i]->setText("");
                menu_items_lines[i]->setText("                                             ");
            }
        

        and now it's ok with the game start:
        0_1510307785529_menu 3.png
        but not ok with pause (it's too large):
        0_1510307707246_menu 4.png

        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