[Qt-interest] Critical bug: QWidgets with size > 16383 break on OS X

Nikos Chantziaras realnc at arcor.de
Sat Jun 12 23:47:37 CEST 2010


I thought the maximum size of a QWidget in Qt4 was something like 2^24 
(16 million-something) pixels on all platforms.  But on OS X, this isn't 
the case.  I have a widget inside a QScrollView, and that widget can 
grow very big in the Y (height) dimension (it's a text display where new 
text is added at the bottom all the time.)  Heights over 40000 are not 
uncommon.

However, on Mac OS X, I'm busted.  When the widget grows over 16383 
pixels in height, it wraps back to 8191, and my application gets very 
messed up.  Note that QWIDGETSIZE_MAX is 16777215 on OS X too, so this 
shouldn't happen.

I will be reporting this to the bug tracker, but if someone knows of 
some workaround for this, I would be very thankful, because right now, 
the application is useless on the Mac :-/

This happens with 4.6.2 and 4.7.0 beta1, both 32-bit.  Mac OS X 10.6.3 
and 10.5.8.

What follows is some example code that triggers the bug.  On Linux, this 
shows a window that (once you scroll to the very bottom) prints "20000" 
(the height of the widget).  On OS X, it prints "8191", which is the 
height of the widget on the Mac, even though 20000 was set.


#include <QApplication>
#include <QScrollArea>
#include <QWidget>
#include <QPainter>

class Widget: public QWidget
{
protected:
     void paintEvent( QPaintEvent* )
     {
         QPainter p(this);
         p.drawText(10, this->height(), QString::number(this->height()));
     }

public:
     Widget(QWidget *parent = 0)
     : QWidget(parent)
     { }
};


int main(int argc, char *argv[])
{
     QApplication a(argc, argv);
     QScrollArea* scr = new QScrollArea;
     Widget* w = new Widget(scr);
     w->resize(500, 20000);
     scr->setWidget(w);
     scr->show();
     return a.exec();
}



More information about the Qt-interest-old mailing list