忘年会続きで体調不良のhermit4です。途中まで調べて、おつきあいが忙しく なって、亀レスになってしまいました。
QRect/QRectFにおいて、高さあるいは幅が0の場合はinvalidな扱いですので、 どうなるのが正しいのかは悩ましい所です。QRectとQRectFの結果が不一 致なのは違和感があるというのはその通りですけど。
ドキュメントではQRectとQRectFで、Emptyに対する説明が異なっています。
QRectF::isEmpty() function returns true if the rectangle's width or height is less than, or equal to, 0.
QRect::isEmpty() function returns true if left() > right() or top() > bottom().
この通りに実装されるとしたら、QRectFの場合は、高さあるいは幅が0の 場合はEmpty で、QRectの場合は、0の場合でもemptyは成立しないように も感じて、これが理由かなとも思ったのですが・・・。
qDebug() << "QRect is empty : " << QRect(10,10,10,0).isEmpty(); qDebug() << "QRect is valid : " << QRect(10,10,10,0).isValid(); qDebug() << "QRectF is empty : " << QRectF(10,10,10,0).isEmpty(); qDebug() << "QRectF is valid : " << QRectF(10,10,10,0).isValid();
QRect is empty : true QRect is valid : false QRectF is empty : true QRectF is valid : false
ということで、想像と違っていました・・・。
おそらく、当初は、QRectFをQRectにアラインした場合に、オリジナルの QRectF時の結果と返還後のQRectで結果が異なるケースを恐れての差分が あったのかとも思うのですが、ともあれソースコードを読むと、double (qreal)が==演算子で比較されていたり、話題にもなっているempty rectと 書くべきコメントがnull rectとしてコメントされていたりと、適当に書い たバグ込みのコードの臭いがぷんぷんしています。
本件は、過去にバグレポートもされていたようですが、実際、この手の ものは直すと多くのアプリケーションを壊す可能性があり変更できない という理由でCloseされているようです。
https://bugreports.qt-project.org/browse/QTBUG-18719
whether zero sized rect should be considered being inside other rects is a question with many right answers However either way we cannot change the behavior as it will most likely break a lot of application.
鈴木さんによると、「最近の傾向だと、直せないなら代替メソッドを作っ て緩やかにそっちに移行していくように仕向ける感じ?」との事なので、 再度reopenして、対処を提案したとしても、直るまでにはしばらく時間 がかかりそうな気がします。