[Qt-interest] Calculating text size in QLineEdit

Matthias Paul slayer81 at gmx.de
Tue Mar 8 11:10:55 CET 2011


-------- 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().
-- 
NEU: FreePhone - kostenlos mobil telefonieren und surfen!			
Jetzt informieren: http://www.gmx.net/de/go/freephone



More information about the Qt-interest-old mailing list