こんにちは。ケイロニアンです。
ドキュメントではQRectとQRectFで、Emptyに対する説明が異なっています。
私も最初はこれかと思いました。でも、説明は異なってますが、仕様的には同 じでした。何言ってるか分かりませんね。(汗)
大昔、サブピクセル?なにそれ美味しいの?って時代は、矩形を左上コーナー の座標と右下コーナーの座標で定義することが多かったです。右下も矩形内部の 座標として定義してましたので、width=right-left+1となります。
説明を見るとQRectもこの定義になっているようです。確かどこかに「歴史的 理由」って書かれていたので、分かっちゃいるけど、もう直せないってやつと思 います。 QRectのempty条件left > rightは、width=right-left+1なので、変形すると
0 > right-left 0 > width-1 1 > width
widthは整数なので、
0 => width
となり、QRectFの条件と一致するのですよ!! 右下コーナー座標を矩形の中に含めたことを激しく後悔する瞬間です。
*
個人的には QRectangle(F) クラスを作って、Qt の中で QRect(F) を使っている コードを全部 QRectangle(F) に置き換えてで QRect(F) を非推奨にするのが いいかなぁと思います。
realとintの差だけなら、templateで定義できたらかっこいいですね!! QRectFをコピペして、そらみみさんの思いを込めて修正し、公開してみれば、 採用されたりして。 Qt初心者の私が言うのはおこがましいですが、isNullって必要性が見えない割 に混乱するし、contains等でNullやEmptyチェックはしない方が良いと私も思い ます。(需要がある以上、よりプリミティブな関数も提供した方が良いので。)
以上