[Qt-interest] Height of QPushButton and QLineEdit different

Oliver Demetz forenbeitraege at oliverdemetz.de
Tue Jun 9 15:53:06 CEST 2009


Hi,
thank you for your extensive answers and the deeper insights on this topic.
For one widget, where I use a QHBoxLayout for positioning and sizing of 
the controls, the proposed

     lineEdit.setFixedHeight(button.sizeHint().height())

worked fine. It is also to some extend "elegant" and still readable in a 
year ;-)

But in another widget, I am doing the whole layout by hand in the 
resizeEvent function by calling setGeometry on each control.

There, I get again a problem, because calling

     lineEdit.setGeometry(x,y, 150, 30)

does not lead to a height of 30! It is again smaller.
And until the last reply I thought that calling setFixedHeight is as 
good as working with setGeometry.

In practice, all those QLayout-subclasses do nothing else but calling 
setGeometry on their widgets, don't they?

Regards,
Oliver


Jens Bache-Wiig schrieb:
> Good answer Girish!
> 
> Actually I was thinking about adding some layout assistance on this topic 
> not too long ago. It seems like a common use case that you would want to 
> align controls at the same height. Perhaps a setHomogenous/setUniformHeight 
> property on boxlayouts would be the way to go in the future so people can 
> hint that their layouts should stay uniform.
> 
> Jens
> 
> 
> "Girish Ramakrishnan" <girish at forwardbias.in> wrote in message 
> news:4A2E4C4A.5010804 at forwardbias.in...
>> Hi Oliver,
>>
>> Oliver Demetz wrote:
>>> Hi all,
>>>
>>> Simple example:
>>>
>>>   QHBoxLayout * lay = new QHBoxLayout;
>>>   lay->addWidget(new QPushButton("Hello World"));
>>>   lay->addWidget(new QLineEdit("Foo Bar"));
>>>   this->setLayout(lay);
>>>
>>> Executing this code, you will see, that the QLineEdit's
>>> height is smaller than the QPushButton's height.
>>>
>>> I think it depends on the particular system, but on
>>> my Windows box here the button has height 28 whereas
>>> the lineedit only has 22 pixels.
>>>
>>> *How can I adjust this???*
>>>
>>> I tried several things:
>>>
>>> (A:)  lineedit->setMinimumSize(button->height());
>>>     Didn't change anything.
>>>
>> The height() is usually not a valid size until the layout has got a
>> chance to provide geometry to child widgets. Also, height() is the
>> actual height() that you see on the screen. You will have to manually
>> activate the layout to make height() something reasonable before the
>> widget is visible. But even then, after the widget is shown, it may get
>> a different height().
>>
>>> (B:)  lineedit->setMinimumHeight(button->height());
>>>       lineedit->setMaximumHeight(button->height());
>>>      Leads to crap, the lineedit gets a huge height,
>>>      I don't know why.
>>>
>> Same as above, height() won't be valid.
>>
>>> (C:)  lineedit.setSizePolicy(
>>>                 lineedit.sizePolicy().horizontalPolicy(),
>>>                 QSizePolicy::Ignored);
>>>       The idea is to make the lineedit *expand* in the
>>>       layout in vertical direction, but this leads also
>>>       to a way too huge height
>>>
>> The layout sets geometry based on widget's sizePolicy + sizeHint. The
>> push button has a fixed size policy in its vertical direction. This
>> means that if the sizeHint returned 80px vertically and the layout has
>> 100 px of vertical space, the layout would resize the button only to
>> 80px (and use alignment to figure out the position). When you set the
>> line edit's policy to ignored, the layout would make the line edit 100px
>> in height. See the problem?
>>
>> One solution is to just
>> lineEdit->setFixedHeight(pushButton->sizeHint().height()); sizeHint will
>> take care of polishing, so you don't need ensurePolished().
>>
>>> Why are the recommended heights for these two controls
>>> different at all?
>>>
>> Girish 
> 
> _______________________________________________
> Qt-interest mailing list
> Qt-interest at trolltech.com
> http://lists.trolltech.com/mailman/listinfo/qt-interest




More information about the Qt-interest-old mailing list