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. Design from book in Code. Don't show anything

Design from book in Code. Don't show anything

Scheduled Pinned Locked Moved Solved General and Desktop
7 Posts 2 Posters 771 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.
  • J Offline
    J Offline
    Josz
    wrote on last edited by Josz
    #1

    Hi,
    like I said in a previous post, I'm following a book to learn qt ;
    I'm trying to make the next design in Code: http://img.fenixzone.net/i/aZI6E8F.png

    Therefore, according the book, I should use the code below, for the three red squares

    MainWindow::MainWindow(QWidget *parent) :
        QMainWindow(parent),
        ui(new Ui::MainWindow)
    {
        ui->setupUi(this);
        setFixedSize(1024,768);
    
        QHBoxLayout *topLayout = new QHBoxLayout(this);
        QComboBox *combo;
        topLayout->addWidget(new QLabel("Printer"));
        topLayout->addWidget(combo = new QComboBox());
    
        //set the bottom part
        QHBoxLayout *buttonsLayout = new QHBoxLayout(this);
        buttonsLayout->addStretch();
        buttonsLayout->addWidget(new QPushButton("Print"));
        buttonsLayout->addWidget(new QPushButton("Cancel"));
    
        //set the central part //ui->centralWidget
        QHBoxLayout *groupLayout = new QHBoxLayout(this);
        QGroupBox *orientationGroup = new QGroupBox();
        groupLayout->addWidget(orientationGroup);
        QGroupBox *colorGroup = new QGroupBox();
        groupLayout->addWidget(colorGroup);
    }
    

    The problem is that the things don't work as expected and the code show nothing, as I described in the previous post: https://forum.qt.io/topic/95914/simply-code-don-t-show-anything.

    Unfortunatelly, the solution [replace *QHBoxLayout topLayout = new QHBoxLayout(this);for *QHBoxLayout groupLayout = new QHBoxLayout(ui->centralWidget);], very kindly contributed, when solution for the thread, don't help to the desired design.

    Please, could somebody help me with de design? (I would like show, as beginning, only the three red squares without sub elements into MainWindow)
    Any help is welcommed. When only links to docs and examples, whith great pleasure.

    Thanks in advance.

    JonBJ 1 Reply Last reply
    -1
    • J Josz

      Hi,
      like I said in a previous post, I'm following a book to learn qt ;
      I'm trying to make the next design in Code: http://img.fenixzone.net/i/aZI6E8F.png

      Therefore, according the book, I should use the code below, for the three red squares

      MainWindow::MainWindow(QWidget *parent) :
          QMainWindow(parent),
          ui(new Ui::MainWindow)
      {
          ui->setupUi(this);
          setFixedSize(1024,768);
      
          QHBoxLayout *topLayout = new QHBoxLayout(this);
          QComboBox *combo;
          topLayout->addWidget(new QLabel("Printer"));
          topLayout->addWidget(combo = new QComboBox());
      
          //set the bottom part
          QHBoxLayout *buttonsLayout = new QHBoxLayout(this);
          buttonsLayout->addStretch();
          buttonsLayout->addWidget(new QPushButton("Print"));
          buttonsLayout->addWidget(new QPushButton("Cancel"));
      
          //set the central part //ui->centralWidget
          QHBoxLayout *groupLayout = new QHBoxLayout(this);
          QGroupBox *orientationGroup = new QGroupBox();
          groupLayout->addWidget(orientationGroup);
          QGroupBox *colorGroup = new QGroupBox();
          groupLayout->addWidget(colorGroup);
      }
      

      The problem is that the things don't work as expected and the code show nothing, as I described in the previous post: https://forum.qt.io/topic/95914/simply-code-don-t-show-anything.

      Unfortunatelly, the solution [replace *QHBoxLayout topLayout = new QHBoxLayout(this);for *QHBoxLayout groupLayout = new QHBoxLayout(ui->centralWidget);], very kindly contributed, when solution for the thread, don't help to the desired design.

      Please, could somebody help me with de design? (I would like show, as beginning, only the three red squares without sub elements into MainWindow)
      Any help is welcommed. When only links to docs and examples, whith great pleasure.

      Thanks in advance.

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

      @Josz
      I don't understand.

      In https://forum.qt.io/topic/95914/simply-code-don-t-show-anything @J-Hilk showed you that you cannot keep creating QLayout(this) on a main window; instead you must start from ui->centralWidget. And you ended up saying "Thank you very much!! That worked!".

      Now you have reverted to code which we know won't work, and said "and the code show nothing". Which we know will be the case. So what is the point in reverting to this code?

      If the proper code does at least work to show something, but then you want to discuss/adjust that layout, would it not be better to start from the code (using ui->centralWidget) which shows everything properly, and then work from there?

      In the case of a main window, everything should descend from centralWidget, not from this.

      As for your actual problem. do you just mean you want to add, say, one QVBoxLayout to the central widget, and then add your sub-widgets ("three red squares") to that, so they are laid out vertically as top, middle, bottom?

      J 1 Reply Last reply
      6
      • JonBJ JonB

        @Josz
        I don't understand.

        In https://forum.qt.io/topic/95914/simply-code-don-t-show-anything @J-Hilk showed you that you cannot keep creating QLayout(this) on a main window; instead you must start from ui->centralWidget. And you ended up saying "Thank you very much!! That worked!".

        Now you have reverted to code which we know won't work, and said "and the code show nothing". Which we know will be the case. So what is the point in reverting to this code?

        If the proper code does at least work to show something, but then you want to discuss/adjust that layout, would it not be better to start from the code (using ui->centralWidget) which shows everything properly, and then work from there?

        In the case of a main window, everything should descend from centralWidget, not from this.

        As for your actual problem. do you just mean you want to add, say, one QVBoxLayout to the central widget, and then add your sub-widgets ("three red squares") to that, so they are laid out vertically as top, middle, bottom?

        J Offline
        J Offline
        Josz
        wrote on last edited by Josz
        #3

        @JonB Thank John,
        good, I ended with "that worked", because @J-Hilk gave me a solution for the thread, but I could not use it for my desired design, so the thread was solved but not my doubts; I thought it would be better a new thread open.

        Due to my ignorance (and the book... so I see, is not good), thought that [ui->centralWidget] was not the right start point for the design.

        Well, I'm glad I was wrong.

        Then the next Question is, once that I have the first element in the middle.. QHBoxLayout *groupLayout = new QHBoxLayout(ui->centralWidget);

        How can I add the upper and lower squares?

        Thanks in advance.

        JonBJ 1 Reply Last reply
        0
        • J Josz

          @JonB Thank John,
          good, I ended with "that worked", because @J-Hilk gave me a solution for the thread, but I could not use it for my desired design, so the thread was solved but not my doubts; I thought it would be better a new thread open.

          Due to my ignorance (and the book... so I see, is not good), thought that [ui->centralWidget] was not the right start point for the design.

          Well, I'm glad I was wrong.

          Then the next Question is, once that I have the first element in the middle.. QHBoxLayout *groupLayout = new QHBoxLayout(ui->centralWidget);

          How can I add the upper and lower squares?

          Thanks in advance.

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

          @Josz
          I don't think you want a QHBoxLayout. That is a horizontal layout, so each thing you add onto it will be placed to the right of the previous thing. I think you mean you want a QVBoxLayout, a vertical layout, so each thing you add onto it will be placed beneath the previous thing.

          Start by add one QVBoxLayout. Then add, say, 3 QPushButton widgets onto it. See how they are vertically arranged? Now you can replace each one with whatever you want. You can even replace one with a QHBoxLayout and then add multiple QWidget onto that, so that "row" holds multiple widgets which are themselves arranged left-to-right.

          J 1 Reply Last reply
          1
          • JonBJ JonB

            @Josz
            I don't think you want a QHBoxLayout. That is a horizontal layout, so each thing you add onto it will be placed to the right of the previous thing. I think you mean you want a QVBoxLayout, a vertical layout, so each thing you add onto it will be placed beneath the previous thing.

            Start by add one QVBoxLayout. Then add, say, 3 QPushButton widgets onto it. See how they are vertically arranged? Now you can replace each one with whatever you want. You can even replace one with a QHBoxLayout and then add multiple QWidget onto that, so that "row" holds multiple widgets which are themselves arranged left-to-right.

            J Offline
            J Offline
            Josz
            wrote on last edited by
            #5

            @JonB You was right! Thank you!

            Here is the code (if someone else have same issue):

                QVBoxLayout *para3CajasRojasHorizontales = new QVBoxLayout(ui->centralWidget);
                QHBoxLayout *topLayout = new QHBoxLayout(this);
                QComboBox *combo;
                topLayout->addWidget(new QLabel("Printer"));
                topLayout->addWidget(combo = new QComboBox());
                para3CajasRojasHorizontales->addLayout(topLayout);
            
                //set the central part //ui->centralWidget
                QHBoxLayout *groupLayout = new QHBoxLayout(this);
                QGroupBox *orientationGroup = new QGroupBox();
                groupLayout->addWidget(orientationGroup);
                QGroupBox *colorGroup = new QGroupBox();
                groupLayout->addWidget(colorGroup);
                para3CajasRojasHorizontales->addLayout(groupLayout);
            
                //set the bottom part
                QHBoxLayout *buttonsLayout = new QHBoxLayout(this);
                buttonsLayout->addStretch();
                buttonsLayout->addWidget(new QPushButton("Print"));
                buttonsLayout->addWidget(new QPushButton("Cancel"));
                para3CajasRojasHorizontales->addLayout(buttonsLayout);
            
            JonBJ 1 Reply Last reply
            1
            • J Josz

              @JonB You was right! Thank you!

              Here is the code (if someone else have same issue):

                  QVBoxLayout *para3CajasRojasHorizontales = new QVBoxLayout(ui->centralWidget);
                  QHBoxLayout *topLayout = new QHBoxLayout(this);
                  QComboBox *combo;
                  topLayout->addWidget(new QLabel("Printer"));
                  topLayout->addWidget(combo = new QComboBox());
                  para3CajasRojasHorizontales->addLayout(topLayout);
              
                  //set the central part //ui->centralWidget
                  QHBoxLayout *groupLayout = new QHBoxLayout(this);
                  QGroupBox *orientationGroup = new QGroupBox();
                  groupLayout->addWidget(orientationGroup);
                  QGroupBox *colorGroup = new QGroupBox();
                  groupLayout->addWidget(colorGroup);
                  para3CajasRojasHorizontales->addLayout(groupLayout);
              
                  //set the bottom part
                  QHBoxLayout *buttonsLayout = new QHBoxLayout(this);
                  buttonsLayout->addStretch();
                  buttonsLayout->addWidget(new QPushButton("Print"));
                  buttonsLayout->addWidget(new QPushButton("Cancel"));
                  para3CajasRojasHorizontales->addLayout(buttonsLayout);
              
              JonBJ Offline
              JonBJ Offline
              JonB
              wrote on last edited by JonB
              #6

              @Josz
              I am glad you are happy.

              Because of our discussion about your use of this in your new QHBoxLayout(this);, personally I would not pass this as parent. I would pass no parent, or if you prefer ui->centralWidget, which is what it is going to end up being later on. I think it would at least benefit you to understand why/what is going on here. You might want to read through e.g. https://stackoverflow.com/questions/35927311/qt5-what-is-the-significance-of-a-layouts-parent and the accepted solution there.

              J 1 Reply Last reply
              1
              • JonBJ JonB

                @Josz
                I am glad you are happy.

                Because of our discussion about your use of this in your new QHBoxLayout(this);, personally I would not pass this as parent. I would pass no parent, or if you prefer ui->centralWidget, which is what it is going to end up being later on. I think it would at least benefit you to understand why/what is going on here. You might want to read through e.g. https://stackoverflow.com/questions/35927311/qt5-what-is-the-significance-of-a-layouts-parent and the accepted solution there.

                J Offline
                J Offline
                Josz
                wrote on last edited by
                #7

                @JonB Thanks again JohnB

                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