QWidget->height() returns incorrect value in 5.3



  • I compared builds with 5.2.1 and 5.3 after finding this bug. I can confirm that 5.2.1 works fine and 5.3 does NOT.
    For example, create a QMainWindow with a QWidget of some size in QtCreator.
    In C++ code, read the QWidgets' height (int h = ui->widget->height()) In 5.2.1 this will be the height you set, in 5.3, it appears to be 1/10th the size.
    Serious BUG!


  • Lifetime Qt Champion

    Hi,

    What OS are you running on ?

    And please post an example code that shows the behavior



  • Ubuntu 14.04, Ubuntu 13.10 and Windows 8.1 all tried.
    The example of the code was posted to the original message.
    int h = ui->widget->height();

    Run this in your debugger and check the value of h. You will see there is a huge difference between versions.


  • Lifetime Qt Champion

    That's not a usable example. You are using a designer based widget so I don't know if you put any layout on it, if you set your widget as central widget etc. Also you don't tell when or where you are getting the widget's height.



  • Just try the simple example I gave and you will see.
    I did say, exactly in the example how to call the height() method.

    Do it any way you like and it all comes out the same.


  • Moderators

    Hi,

    The correct sizes will be calculated if you show() the widget.

    @
    QWidget w;
    w.setGeometry(0, 0, 400, 300);

    auto layout = new QVBoxLayout;
    auto textEdit = new QTextEdit;
    layout->addWidget(textEdit);
    w.setLayout(layout);
    
    qDebug() << "Before showing: " << textEdit->height();
    w.show();
    qDebug() << "After showing: " << textEdit->height();
    

    @

    My output is:
    @
    Before showing: 480
    After showing: 278
    @

    As a workaround, try calling this->show() before ui->widget->height().

    Since this behaviour breaks old programs, please report it to http://bugreports.qt-project.org/



  • That's pretty wrong and it breaks everything. Geometry shuold be calculated and supplied as soon as possible,no matter if it's visible or not. I understand why on X11 frameGeometry() is tricky , but geometry should be correct all the time.
    I guess that this is really ugly bug and if not then it's bad behaviour.



  • Firstly, one should not call this in Main unless you really have to.
    We dont, we have this with the widgets already showing. Typically from some slot called when a button is pressed. The widget in our case, never changes size during the entire applicaiton run.
    This thread is just to let people know there is a bug. If someone at Qt wants to write a bug report, they can but I wont after all the bad prior experiences.



  • I've also had bad expiriences with issues reporting, but must say that also I had good expiriences. Depends on person who is responsible for issue, so generally it's bad idea to NOT report such issue.


Log in to reply
 

Looks like your connection to Qt Forum was lost, please wait while we try to reconnect.