標準的な紙の寸法をQt GUIで取得:QPageSize::sizePoints()の使い方


QPageSize::sizePoints()は、Qt GUIライブラリにおいて、標準的な紙の寸法に基づいて、指定されたページサイズIDのサイズをポイント単位で返します。この関数は、印刷やページレイアウトなどのタスクに役立ちます。

構文

QSize QPageSize::sizePoints(PageSizeId pageSizeId) const;

パラメータ

  • pageSizeId: 標準的な紙の寸法を表すPageSizeId型の値。

戻り値

QSize型の値。この値は、ページの幅と高さをポイント単位で表します。

QPageSize pageSize = QPageSize::A4;
QSize sizePoints = pageSize.sizePoints();
qDebug() << "A4 paper size in points:" << sizePoints;

このコードは、A4用紙のサイズをポイント単位で出力します。

詳細

QPageSize::sizePoints()は、PageSizeIdに基づいて、ページのサイズをポイント単位で計算します。この計算は、プリンターの解像度やシステム設定などの要素を考慮して行われます。

この関数は、標準的な紙の寸法に基づいたサイズを返すため、印刷やページレイアウトなどのタスクに適しています。ただし、特定のプリンターや紙の種類に合わせたサイズが必要な場合は、QPageSize::size()関数を使用する必要があります。

  • QPageSize::sizePoints()は、const関数です。つまり、この関数はオブジェクトの状態を変更しません。
  • QPageSize::sizePoints()は、静的メンバ関数です。つまり、QPageSizeオブジェクトを作成せずに直接呼び出すことができます。
  • QPageSize::rectPoints(): 指定されたページサイズIDの矩形をポイント単位で返します。
  • QPageSize::rect(): 指定されたページサイズIDの矩形を返します。
  • QPageSize::sizePixels(): 指定されたページサイズIDのサイズをピクセル単位で返します。
  • QPageSize::size(): 指定されたページサイズIDのサイズを指定された単位で返します。


#include <QCoreApplication>
#include <QPageSize>

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

  QPageSize pageSize = QPageSize::A4;
  QSize sizePoints = pageSize.sizePoints();

  qDebug() << "A4 paper size in points:" << sizePoints;

  return 0;
}

例2:異なるページサイズIDのサイズをポイント単位で出力

#include <QCoreApplication>
#include <QPageSize>

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

  QPageSize pageSizes[] = {
    QPageSize::A0,
    QPageSize::A1,
    QPageSize::A2,
    QPageSize::A3,
    QPageSize::A4,
    QPageSize::A5,
    QPageSize::A6,
    QPageSize::A7,
    QPageSize::A8,
    QPageSize::A9,
    QPageSize::A10
  };

  for (QPageSize pageSize : pageSizes) {
    QSize sizePoints = pageSize.sizePoints();
    qDebug() << pageSize.id() << ":" << sizePoints;
  }

  return 0;
}

このコードは、A0からA10までの標準的な紙の寸法のサイズをポイント単位で出力します。

例3:指定された単位でページサイズを返す

#include <QCoreApplication>
#include <QPageSize>

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

  QPageSize pageSize = QPageSize::A4;

  QSize sizePoints = pageSize.sizePoints();
  QSize sizePixels = pageSize.sizePixels();
  QSize sizeMillimeters = pageSize.size(QPageSize::Millimeter);

  qDebug() << "A4 paper size in points:" << sizePoints;
  qDebug() << "A4 paper size in pixels:" << sizePixels;
  qDebug() << "A4 paper size in millimeters:" << sizeMillimeters;

  return 0;
}

このコードは、A4用紙のサイズをポイント、ピクセル、ミリメートル単位で出力します。

#include <QCoreApplication>
#include <QPageSize>

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

  QPageSize pageSize = QPageSize::A4;

  QRect rectPoints = pageSize.rectPoints();

  qDebug() << "A4 paper rectangle in points:" << rectPoints;

  return 0;
}


代替方法

  • 単位変換を行う
  • カスタムページサイズを作成する
  • QPrinter::PageSizeを使用する

QPrinter::PageSizeを使用する

QPrinter::PageSizeは、QPrinterクラスによって提供される列挙型です。この列挙型は、標準的な紙の寸法を表す定数を定義しています。QPageSize::sizePoints()を使用する代わりに、QPrinter::PageSizeを使用してページサイズを指定することができます。

QPrinter printer;
QPrinter::PageSize pageSize = printer.PageSize;

if (pageSize == QPrinter::A4) {
  qDebug() << "Current printer page size is A4";
} else {
  qDebug() << "Current printer page size is:" << pageSize;
}

このコードは、現在のプリンターのページサイズを取得し、A4かどうかを確認します。

カスタムページサイズを作成する

標準的な紙の寸法に合わない場合は、カスタムページサイズを作成することができます。これを行うには、QPageSizeコンストラクタを使用して、幅と高さをポイント単位で指定します。

QPageSize customPageSize(210, 297); // Letter size in points
QSize sizePoints = customPageSize.sizePoints();

qDebug() << "Custom page size in points:" << sizePoints;

このコードは、Letterサイズのカスタムページサイズを作成し、そのサイズをポイント単位で出力します。

単位変換を行う

QPageSize::sizePoints()は、ページサイズをポイント単位で返します。他の単位でページサイズを取得する必要がある場合は、単位変換を行う必要があります。

QPageSize pageSize = QPageSize::A4;
QSize sizePoints = pageSize.sizePoints();

double centimetersPerPoint = 0.3937; // Conversion factor from points to centimeters
QSize sizeCentimeters = QSize(sizePoints.width() * centimetersPerPoint,
                             sizePoints.height() * centimetersPerPoint);

qDebug() << "A4 paper size in centimeters:" << sizeCentimeters;

このコードは、A4用紙のサイズをポイント単位で取得し、センチメートル単位に変換します。