Qt GUIにおけるページサイズ操作の落とし穴:QPageSize::isValid() の代替方法と注意点


QPageSize::isValid() は、Qt GUIにおける QPageSize オブジェクトが有効かどうかを検証する関数です。QPageSize オブジェクトは、ページのサイズと単位を表すものです。

関数詳細

bool QPageSize::isValid() const

この関数は、QPageSize オブジェクトが有効かどうかを bool 型の値で返します。有効な場合、true が返されます。そうでない場合は、false が返されます。

有効性の条件

QPageSize オブジェクトが有効であるためには、以下の条件を満たす必要があります。

  • units() の値が有効な QPageSize::Unit 列挙体値であること
  • width()height() の値が正数であること
QPageSize pageSize(QSizeF(210, 297), QPageSize::Millimeter);

if (pageSize.isValid()) {
    // ページサイズが有効である場合の処理
} else {
    // ページサイズが無効である場合の処理
}
  • ページサイズの有効性を検証する別の方法として、QPageSize::id() 関数を使用して、標準のページサイズIDと比較する方法があります。
  • QPageSize::isValid() 関数は、QPageSize オブジェクトが作成された時点での有効性を検証します。オブジェクトの値が後で変更された場合、この関数は古い値に基づいて判断するため、必ずしも正確とは限りません。


サンプル 1: ページサイズの有効性を検証する

#include <QApplication>
#include <QPageSize>

int main(int argc, char *argv[]) {
    QApplication app(argc, argv);

    // ページサイズを作成
    QPageSize pageSize(QSizeF(210, 297), QPageSize::Millimeter);

    // ページサイズが有効かどうか検証
    if (pageSize.isValid()) {
        // ページサイズが有効な場合の処理
        qDebug() << "ページサイズは有効です";
    } else {
        // ページサイズが無効な場合の処理
        qDebug() << "ページサイズは無効です";
    }

    return app.exec();
}
#include <QApplication>
#include <QPageSize>

int main(int argc, char *argv[]) {
    QApplication app(argc, argv);

    // ページサイズを作成
    QPageSize pageSize(QSizeF(210, 297), QPageSize::Millimeter);

    // 標準のA4ページサイズIDを取得
    QPageSize::StandardPageSizes standardPageSizes = QPageSize::A4;

    // ページサイズが標準のページサイズIDと一致するかどうか検証
    if (pageSize.id() == standardPageSizes) {
        // ページサイズが標準のページサイズと一致する場合の処理
        qDebug() << "ページサイズは標準のA4ページサイズです";
    } else {
        // ページサイズが標準のページサイズと一致しない場合の処理
        qDebug() << "ページサイズは標準のA4ページサイズではありません";
    }

    return app.exec();
}


width() と height() の値を検証する

QPageSize::isValid() 関数は、width()height() の値が正数であることを確認します。そのため、これらの値を直接検証することで、QPageSize::isValid() 関数を使用せずにページサイズの有効性を判断することができます。

if (pageSize.width() > 0 && pageSize.height() > 0) {
    // ページサイズが有効な場合の処理
} else {
    // ページサイズが無効な場合の処理
}

units() の値が有効な QPageSize::Unit 列挙体値であることを確認する

QPageSize::isValid() 関数は、units() の値が有効な QPageSize::Unit 列挙体値であることを確認します。そのため、この値を直接確認することで、QPageSize::isValid() 関数を使用せずにページサイズの有効性を判断することができます。

if (pageSize.units() >= QPageSize::Millimeter && pageSize.units() <= QPageSize::Custom) {
    // ページサイズが有効な場合の処理
} else {
    // ページサイズが無効な場合の処理
}

QPageSize::id() 関数を使用して、標準のページサイズIDと比較する

QPageSize::id() 関数は、QPageSize オブジェクトに割り当てられた標準のページサイズIDを取得します。このIDを標準のページサイズIDと比較することで、ページサイズの有効性を判断することができます。

QPageSize::StandardPageSizes standardPageSizes = QPageSize::A4;

if (pageSize.id() == standardPageSizes || pageSize.isValid()) {
    // ページサイズが有効な場合の処理
} else {
    // ページサイズが無効な場合の処理
}

カスタム検証ロジックを実装する

上記の方法でページサイズの有効性を判断できない場合は、カスタム検証ロジックを実装することができます。このロジックは、アプリケーションの要件に応じて自由に設計することができます。