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. Button resizing how and where?
Forum Updated to NodeBB v4.3 + New Features

Button resizing how and where?

Scheduled Pinned Locked Moved Solved General and Desktop
13 Posts 5 Posters 4.3k Views 3 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.
  • SPlattenS Offline
    SPlattenS Offline
    SPlatten
    wrote on last edited by
    #4

    @mrjj, sadly I can't upload the files and I can't embed the content either the forum won't let me.

    Kind Regards,
    Sy

    1 Reply Last reply
    0
    • SPlattenS Offline
      SPlattenS Offline
      SPlatten
      wrote on last edited by
      #5

      @JonB, Sorry, I should have said, I've copied this ui and the source and pasted into a new ui, so all the settings should be the same, but the new version doesn't behave the same way and it doesn't rescale the buttons.

      As far as I can see none of the buttons or layouts have any stylesheet settings. The container for the buttons is the QGridLayout.

      Kind Regards,
      Sy

      1 Reply Last reply
      0
      • SPlattenS Offline
        SPlattenS Offline
        SPlatten
        wrote on last edited by
        #6

        Please see this link which I've included a couple of images which I hope will help:

        https://stackoverflow.com/questions/56889011/how-is-this-qt-application-resizing-the-buttons-to-fit

        Kind Regards,
        Sy

        1 Reply Last reply
        0
        • SPlattenS SPlatten

          I'm working on a smart card reading device ACR890, the operating system is Linux and the SDK is for Qt. The device comes with a sample application "ACR890_Sample_Codes", I have the source code to this application and am running it remotely.

          One part of this application has a WiFi set-up wizard, which I've looked at in Qt Creator, there are several widgets in the form. The first allows the user to select a WiFi network and then press the Enter button. On pressing Enter the initial widget is hidden and the password widget is then displayed. This has a keyboard containing 42 pushbuttons. In Qt Creator these buttons are large and go off the display, when the application is running the buttons all fit nicely into the form.

          Its this that I don't understand how or where it is being done, I've looked at form and source code over and over and I cannot see anything that causes the buttons to be resized or rescaled to fit, can anyone help?

          I've attached the XML for the user interface and the classes associated with it. Unfortunately I don't have enough privileges to upload the files and they are to big to include in this post.

          [0_1562244228342_DialogWifi.h](Uploading 100%)
          [3_1562244243069_WifiScan.h](Uploading 100%) [2_1562244243068_WifiScan.cpp](Uploading 100%) [1_1562244243068_DialogWifi.ui](Uploading 100%) [0_1562244243068_DialogWifi.cpp](Uploading 100%)

          JKSHJ Offline
          JKSHJ Offline
          JKSH
          Moderators
          wrote on last edited by
          #7

          @SPlatten said in Button resizing how and where?:

          Its this that I don't understand how or where it is being done, I've looked at form and source code over and over and I cannot see anything that causes the buttons to be resized or rescaled to fit, can anyone help?

          A layout is responsible for sizing and positioning the widgets within itself. See https://doc.qt.io/qt-5/layout.html The photo you posted on StackOverflow shows a 4x13 QGridLayout.

          However, the layout will only scale to the dimensions of its container if it has been applied to the container.

          The "messiness" of your screenshot in Qt Creator/Qt Designer tells me that your layout is "floating", and has not been properly applied to its parent widget:

          I don't know how the original author did it, but the results are only valid for that OS and screen resolution. It is not portable or scalable.

          Anyway, you can create a proper grid that scales on your PC like this:

          #include <QApplication>
          #include <QWidget>
          #include <QGridLayout>
          #include <QPushButton>
          
          static const QVector<QStringList> characters
          {
          	QStringList{"~", "!", "@", "#", "$", "%", "^", "&", "*", "(", ")", "_", "+"},
          	QStringList{"`", "1", "2", "3", "4", "5", "6", "7", "8", "9", "0", "-", "="},
          	QStringList{"[", "]", "\\", ";", " ", ",", ".", "/", "{", "}", "|", ":", "\""},
          	QStringList{"<", ">", "?"}
          };
          
          int main(int argc, char **argv)
          {
          	QApplication app(argc, argv);
          
          	auto grid = new QGridLayout;
          	for (int r = 0; r < characters.count(); ++r)
          	{
          		for (int c = 0; c < characters[r].count(); ++c)
          		{
          			auto button = new QPushButton(characters[r][c]);
          			button->setMinimumSize(20, 20);
          			button->setSizePolicy(QSizePolicy::Expanding, QSizePolicy::Expanding);
          			grid->addWidget(button, r, c);
          		}
          	}
          
          	QWidget topLevel;
          	topLevel.setLayout(grid); // This step makes the layout scale with the top-level widget
          	topLevel.show();
          
          	return app.exec();
          }
          

          Run the program on your PC, resize the program window, and watch the buttons change shape.

          If you really want to know how the original author did it, look up the generated code. The XML file gets converted into C++ code at compile-time -- look for a file called ui_DisplayWifi.h in your build folder.

          Qt Doc Search for browsers: forum.qt.io/topic/35616/web-browser-extension-for-improved-doc-searches

          1 Reply Last reply
          4
          • SPlattenS Offline
            SPlattenS Offline
            SPlatten
            wrote on last edited by
            #8

            I didn't create the layout that is a direct screenshot from the sample application which does work, mine copy of it does not.

            Kind Regards,
            Sy

            JKSHJ 1 Reply Last reply
            0
            • SPlattenS SPlatten

              I didn't create the layout that is a direct screenshot from the sample application which does work, mine copy of it does not.

              JKSHJ Offline
              JKSHJ Offline
              JKSH
              Moderators
              wrote on last edited by
              #9

              @SPlatten said in Button resizing how and where?:

              I didn't create the layout that is a direct screenshot from the sample application which does work, mine copy of it does not.

              I provided some information and hints in my previous post. Do you have any further questions?

              Qt Doc Search for browsers: forum.qt.io/topic/35616/web-browser-extension-for-improved-doc-searches

              1 Reply Last reply
              0
              • SPlattenS Offline
                SPlattenS Offline
                SPlatten
                wrote on last edited by SPlatten
                #10

                Yes, this morning I launched the original application and this is what I found in the UI using Qt Creator:

                The UI geometry [(0,0), 240 x 320]
                This contains a QWidget called WidgetPassword with geometry [(0,40) 240 x 281]
                The QGridLayout is a child of WidgetPassword, layoutSizeConstraint: SetDefaultConstraint

                My copy of this form, which is slightly different but nothing that should make a difference:

                The UI geometry [(0,0), 240 x 300] because I shift the form down in the display by 20 pixels.
                This contains a QWidget called WidgetPassword with geometry [(0,40) 240 x 211]
                The QGridLayout is a child of WidgetPassword, layoutSizeConstraint: SetDefaultConstraint

                I've just noticed the difference in geometry width for the widget parent, I'm rebuilding now after changing this to match the original.

                [Edit] damit, thought that was going to be it, no change.

                Kind Regards,
                Sy

                J.HilkJ 1 Reply Last reply
                0
                • SPlattenS SPlatten

                  Yes, this morning I launched the original application and this is what I found in the UI using Qt Creator:

                  The UI geometry [(0,0), 240 x 320]
                  This contains a QWidget called WidgetPassword with geometry [(0,40) 240 x 281]
                  The QGridLayout is a child of WidgetPassword, layoutSizeConstraint: SetDefaultConstraint

                  My copy of this form, which is slightly different but nothing that should make a difference:

                  The UI geometry [(0,0), 240 x 300] because I shift the form down in the display by 20 pixels.
                  This contains a QWidget called WidgetPassword with geometry [(0,40) 240 x 211]
                  The QGridLayout is a child of WidgetPassword, layoutSizeConstraint: SetDefaultConstraint

                  I've just noticed the difference in geometry width for the widget parent, I'm rebuilding now after changing this to match the original.

                  [Edit] damit, thought that was going to be it, no change.

                  J.HilkJ Offline
                  J.HilkJ Offline
                  J.Hilk
                  Moderators
                  wrote on last edited by
                  #11

                  @SPlatten Inspect the associated c++ class, maybe the original author reparented or did some other Layout management there.

                  I had to do that once, as the Designer wouldn't let me assign a Layout to the pages of a StackedWidget...


                  Be aware of the Qt Code of Conduct, when posting : https://forum.qt.io/topic/113070/qt-code-of-conduct


                  Q: What's that?
                  A: It's blue light.
                  Q: What does it do?
                  A: It turns blue.

                  1 Reply Last reply
                  0
                  • SPlattenS Offline
                    SPlattenS Offline
                    SPlatten
                    wrote on last edited by SPlatten
                    #12

                    @J-Hilk , If they did its so subtle and badly commented, I'm now going to compare all the files to try and find something including the XML.

                    After comparing the files I found nothing, still the same problem and still a mystery.

                    Kind Regards,
                    Sy

                    1 Reply Last reply
                    0
                    • SPlattenS Offline
                      SPlattenS Offline
                      SPlatten
                      wrote on last edited by SPlatten
                      #13

                      Fixed, the problem was that the width of one of the geometry fields wasn't the same, having compared the XML again I found and corrected this, now it's ok.

                      I believe there is a bug in Qt Creator, either that or undesirable behaviour in that on the form I have a QGridLayout if set the geometry of the object to what I want and save its ok, but if I go back in and add something else to the form or edit one of the other controls, when the layout is saved the geometry for the QGridLayout is modified (not by me) and this breaks the layout as the buttons contained within it no longer scale correctly.

                      Kind Regards,
                      Sy

                      1 Reply Last reply
                      1

                      • Login

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