[Qt-interest] Calculating text size in QLineEdit
Tony Rietwyk
tony.rietwyk at rightsoft.com.au
Tue Mar 8 11:30:02 CET 2011
> Sent: Tuesday, 8 March 2011 21:11
> -------- Original-Nachricht --------
> > Datum: Tue, 8 Mar 2011 10:20:23 +0100
> > Von: "Andre Somers" <andre at familiesomers.nl>
> > An: "\'qt-interest at trolltech.com\'" <qt-interest at trolltech.com>
> > Betreff: Re: [Qt-interest] Calculating text size in QLineEdit
>
> > Op Di, 8 maart, 2011 10:06 am, schreef Matthias Paul:
> > > Hello!
> > >
> > > I created a QLineEdit subclass, which automatically
> displays a truncated
> > > text if the original text is too long for the widget's
> size, so that
> > > there's no need to scroll for the user. Instead a tooltip
> with full text
> > > is displayed.
> > >
> > > QFontMetrics calculates the size required for the
> displayed text based
> > on
> > > QWidget's size() (provided by ResizeEvent). Still, I
> cannot figure out
> > how
> > > to get the the text label size _minus_ widget's borders
> and margins.
> > Guess
> > > I have to use QStyle somehow, so can someone give me a
> hint please?
> >
> > Perhaps you can use QStyle::subElementRect, using
> > QStyle::SE_LineEditContents for the element argument, and a
> style option
> > initialized with your line edit widget as the style option?
> That should
> > give you the rect that is available to draw the text.
> >
> > André
> >
>
> Hello André!
>
> Thank you for your reply!
>
> The subelementRect() always returns an invalid QRect,
> although the QLineEdit is displayed and has content in it.
>
> That's what I tried: (typos included)
> --------------------------------------------------
> void
> TruncatedLineEdit::resizeEvent(
> QResizeEvent * resizeEvent) {
>
> QLineEdit::resizeEvent(resizeEvent);
>
> qDebug() << "QWidget's size (by event):" << resizeEvent->size();
> QStyleOption option;
> option.initFrom(this);
> qDebug() << "QWidget's content rect (by style):"
> << this->style()->subElementRect(
> QStyle::SE_LineEditContents,
> &option,
> this);
> // do smth with size information
> }
> --------------------------------------------------
>
> The output is:
> --------------------------------------------------
> QWidget's size (by event): QSize(246, 22)
> QWidget's content rect (by style): QRect(0,0 0x0)
> --------------------------------------------------
>
>
> Is it because QLineEdit has no user-style set to it?
> QLineEdit has been set with usual calls like setFont(),
> setReadOnly() and setObjectName().
> --
Hi Matthias,
Does QWidget.contentsRect() work for you?
Tony
More information about the Qt-interest-old
mailing list