Spec-Zone.ru › Qt 5.14

Класс QMatrix

Класс QMatrix задаёт 2D преобразования системы координат. Подробнее...

Заголовок: #include <QMatrix>
qmake: QT += gui

Этот класс устарел. Он предоставляется для совместимости со старым кодом. Мы настоятельно не рекомендуем использовать его в новом коде.

  • Список всех членов, включая унаследованные

Открытые функции

QMatrix(const QMatrix &matrix)
QMatrix(qreal m11, qreal m12, qreal m21, qreal m22, qreal dx, qreal dy)
QMatrix()
QMatrix & operator=(const QMatrix &matrix)
qreal m11() const
qreal m12() const
qreal m21() const
qreal m22() const
qreal determinant() const
qreal dx() const
qreal dy() const
QMatrix inverted(bool *invertible = nullptr) const
bool isIdentity() const
bool isInvertible() const
void map(qreal x, qreal y, qreal *tx, qreal *ty) const
void map(int x, int y, int *tx, int *ty) const
QPoint map(const QPoint &point) const
QPointF map(const QPointF &point) const
QLine map(const QLine &line) const
QLineF map(const QLineF &line) const
QPolygonF map(const QPolygonF &polygon) const
QPolygon map(const QPolygon &polygon) const
QRegion map(const QRegion &region) const
QPainterPath map(const QPainterPath &path) const
QRectF mapRect(const QRectF &rectangle) const
QRect mapRect(const QRect &rectangle) const
QPolygon mapToPolygon(const QRect &rectangle) const
void reset()
QMatrix & rotate(qreal degrees)
QMatrix & scale(qreal sx, qreal sy)
void setMatrix(qreal m11, qreal m12, qreal m21, qreal m22, qreal dx, qreal dy)
QMatrix & shear(qreal sh, qreal sv)
QMatrix & translate(qreal dx, qreal dy)
QVariant operator QVariant() const
bool operator!=(const QMatrix &matrix) const
QMatrix operator*(const QMatrix &matrix) const
QMatrix & operator*=(const QMatrix &matrix)
bool operator==(const QMatrix &matrix) const

Связанные нечлены

bool qFuzzyCompare(const QMatrix &m1, const QMatrix &m2)
uint qHash(const QMatrix &key, uint seed = 0)
QPoint operator*(const QPoint &point, const QMatrix &matrix)
QPointF operator*(const QPointF &point, const QMatrix &matrix)
QLineF operator*(const QLineF &line, const QMatrix &matrix)
QLine operator*(const QLine &line, const QMatrix &matrix)
QPolygon operator*(const QPolygon &polygon, const QMatrix &matrix)
QPolygonF operator*(const QPolygonF &polygon, const QMatrix &matrix)
QRegion operator*(const QRegion &region, const QMatrix &matrix)
QPainterPath operator*(const QPainterPath &path, const QMatrix &matrix)
QDataStream & operator<<(QDataStream &stream, const QMatrix &matrix)
QDataStream & operator>>(QDataStream &stream, QMatrix &matrix)

Подробное описание

Матрица задаёт, как преобразовать систему координат путём перевода, масштабирования, сдвига или поворота и обычно используется при отрисовке графики. QMatrix, в отличие от QTransform, не позволяет выполнять перспективные преобразования. QTransform является рекомендуемым классом преобразований в Qt.

Объект QMatrix может быть создан с помощью функций setMatrix(), scale(), rotate(), translate() и shear(). В качестве альтернативы, можно применять основные операции над матрицами. Матрица также может быть задана при создании, и её можно сбросить до единичной матрицы (по умолчанию) с помощью функции reset().

Класс QMatrix поддерживает отображение графических примитивов: заданная точка, линия, многоугольник, область или путь художника могут быть отображены в системе координат, определённой матрицей this, с помощью функции map(). В случае прямоугольника его координаты могут быть преобразованы с помощью функции mapRect(). Прямоугольник также может быть преобразован в многоугольник (отображённый в системе координат, определяемой матрицей this), используя функцию mapToPolygon().

QMatrix предоставляет функцию isIdentity(), которая возвращает true если матрица является единичной матрицей, и функцию isInvertible(), которая возвращает true если матрица невырожденная (т.е. AB = BA = I). Функция inverted() возвращает инвертированную копию матрицы this, если она обратима (в противном случае возвращает единичную матрицу). Кроме того, QMatrix предоставляет функцию determinant(), возвращающую определитель матрицы.

Наконец, класс QMatrix поддерживает умножение матриц, а объекты класса могут быть сериализованы и сравниваются.

Отображение графики

При отображении графики матрица определяет преобразования, но фактическое преобразование выполняется процедурами рисования в QPainter.

По умолчанию QPainter работает в собственной системе координат связанного устройства. Стандартная система координат QPaintDevice имеет начало отсчёта в верхнем левом углу. Значения x увеличиваются вправо; значения y увеличиваются вниз. Подробное описание см. в документации системы координат.

QPainter имеет функции для трансляции, масштабирования, сдвига и поворота системы координат без использования QMatrix. Например:

void SimpleTransformation::paintEvent(QPaintEvent *)
{
    QPainter painter(this);
    painter.setPen(QPen(Qt::blue, 1, Qt::DashLine));
    painter.drawRect(0, 0, 100, 100);

    painter.rotate(45);

    painter.setFont(QFont("Helvetica", 24));
    painter.setPen(QPen(Qt::black, 1));
    painter.drawText(20, 10, "QMatrix");
}

Хотя эти функции очень удобны, может быть эффективнее создать QMatrix и вызвать QPainter::setMatrix(), если вам нужно выполнить более одной операции преобразования. Например:

void CombinedTransformation::paintEvent(QPaintEvent *)
{
    QPainter painter(this);
    painter.setPen(QPen(Qt::blue, 1, Qt::DashLine));
    painter.drawRect(0, 0, 100, 100);

    QMatrix matrix;
    matrix.translate(50, 50);
    matrix.rotate(45);
    matrix.scale(0.5, 1.0);
    painter.setMatrix(matrix);

    painter.setFont(QFont("Helvetica", 24));
    painter.setPen(QPen(Qt::black, 1));
    painter.drawText(20, 10, "QMatrix");
}

Основные операции с матрицей

Объект QMatrix содержит матрицу 3x3. Элементы dx и dy определяют горизонтальный и вертикальный сдвиг. Элементы m11 и m22 определяют горизонтальное и вертикальное масштабирование. И, наконец, элементы m21 и m12 определяют горизонтальный и вертикальный сдвиг.

QMatrix преобразует точку на плоскости в другую точку, используя следующие формулы:

x' = m11*x + m21*y + dx
y' = m22*y + m12*x + dy

Точка (x, y) — исходная точка, а (x', y') — преобразованная точка. (x', y') можно преобразовать обратно в (x, y), выполнив ту же операцию с матрицей inverted().

Различные элементы матрицы могут быть установлены при создании матрицы или с помощью функции setMatrix() позже. Они также могут быть изменены с помощью удобных функций translate(), rotate(), scale() и shear(). Текущие значения можно получить с помощью функций m11(), m12(), m21(), m22(), dx() и dy().

Трансляция — это самое простое преобразование. Установка dx и dy переместит систему координат на dx единиц вдоль оси X и dy единиц вдоль оси Y. Масштабирование можно выполнить, установив m11 и m22. Например, установка m11 в 2 и m22 в 1,5 удвоит высоту и увеличит ширину на 50%. Единичная матрица имеет m11 и m22, установленные в 1 (все остальные установлены в 0), отображая точку на себя. Сдвиг контролируется m12 и m21. Установка этих элементов на значения, отличные от нуля, повернёт систему координат. Поворот достигается тщательной настройкой коэффициентов сдвига и коэффициентов масштабирования.

Вот пример комбинированных преобразований, использующий основные операции с матрицами:

void BasicOperations::paintEvent(QPaintEvent *)
{
    double pi = 3.14;

    double a    = pi/180 * 45.0;
    double sina = sin(a);
    double cosa = cos(a);

    QMatrix translationMatrix(1, 0, 0, 1, 50.0, 50.0);
    QMatrix rotationMatrix(cosa, sina, -sina, cosa, 0, 0);
    QMatrix scalingMatrix(0.5, 0, 0, 1.0, 0, 0);

    QMatrix matrix;
    matrix =  scalingMatrix * rotationMatrix * translationMatrix;

    QPainter painter(this);
    painter.setPen(QPen(Qt::blue, 1, Qt::DashLine));
    painter.drawRect(0, 0, 100, 100);

    painter.setMatrix(matrix);

    painter.setFont(QFont("Helvetica", 24));
    painter.setPen(QPen(Qt::black, 1));
    painter.drawText(20, 10, "QMatrix");
}

См. также QPainter, QTransform, Система координат, Пример аффинных преобразований и Пример преобразований.

Документация по функциям-членам

QMatrix::QMatrix(const QMatrix &matrix)

Конструирует матрицу, являющуюся копией заданной матрицы matrix.

QMatrix::QMatrix(qreal m11, qreal m12, qreal m21, qreal m22, qreal dx, qreal dy)

Конструирует матрицу с элементами m11, m12, m21, m22, dx и dy.

См. также setMatrix().

QMatrix::QMatrix()

Конструирует единичную матрицу.

Все элементы установлены в ноль, за исключением m11 и m22 (указывающих масштаб), которые установлены в 1.

См. также reset().

QMatrix &QMatrix::operator=(const QMatrix &matrix)

Присваивает значения заданной матрицы matrix этой матрице.

qreal QMatrix::m11() const

Возвращает коэффициент горизонтального масштабирования.

См. также scale() и Основные операции с матрицей.

qreal QMatrix::m12() const

Возвращает коэффициент вертикального сдвига.

См. также shear() и Основные операции с матрицей.

qreal QMatrix::m21() const

Возвращает коэффициент горизонтального сдвига.

См. также shear() и Основные операции с матрицей.

qreal QMatrix::m22() const

Возвращает коэффициент вертикального масштабирования.

См. также scale() и Основные операции с матрицей.

qreal QMatrix::determinant() const

Возвращает определитель матрицы.

Эта функция была добавлена в Qt 4.6.

qreal QMatrix::dx() const

Возвращает коэффициент горизонтального сдвига.

См. также translate() и Основные операции с матрицей.

qreal QMatrix::dy() const

Возвращает коэффициент вертикального сдвига.

См. также translate() и Основные операции с матрицей.

QMatrix QMatrix::inverted(bool *invertible = nullptr) const

Возвращает инвертированную копию этой матрицы.

Если матрица является вырожденной (необратимой), возвращаемая матрица является единичной матрицей. Если invertible допустим (т.е. не 0), его значение устанавливается в true, если матрица обратима, иначе в false.

См. также isInvertible().

bool QMatrix::isIdentity() const

Возвращает true если матрица является единичной матрицей, в противном случае возвращает false.

См. также reset().

bool QMatrix::isInvertible() const

Возвращает true если матрица обратима, в противном случае возвращает false.

См. также inverted().

void QMatrix::map(qreal x, qreal y, qreal *tx, qreal *ty) const

Отображает заданные координаты x и y в систему координат, определённую этой матрицей. Результирующие значения помещаются в *tx и *ty соответственно.

Координаты преобразуются по следующим формулам:

x' = m11*x + m21*y + dx
y' = m22*y + m12*x + dy

Точка (x, y) — исходная точка, а (x', y') — преобразованная точка.

См. также Основные операции с матрицей.

void QMatrix::map(int x, int y, int *tx, int *ty) const

Это перегруженная функция.

Отображает заданные координаты x и y в систему координат, определённую этой матрицей. Результирующие значения помещаются в *tx и *ty соответственно. Обратите внимание, что преобразованные координаты округляются до ближайшего целого числа.

QPoint QMatrix::map(const QPoint &point) const

Это перегруженный метод.

Создаёт и возвращает объект QPoint, являющийся копией заданной точки point, отображённой в систему координат, определяемую этой матрицей. Обратите внимание, что преобразованные координаты округляются до ближайшего целого числа.

QPointF QMatrix::map(const QPointF &point) const

Это перегруженный метод.

Создаёт и возвращает объект QPointF, являющийся копией заданной точки point, отображённой в систему координат, определяемую этой матрицей.

QLine QMatrix::map(const QLine &line) const

Это перегруженный метод.

Создаёт и возвращает объект QLine, являющийся копией заданной прямой line, отображённой в систему координат, определяемую этой матрицей. Обратите внимание, что преобразованные координаты округляются до ближайшего целого числа.

QLineF QMatrix::map(const QLineF &line) const

Это перегруженный метод.

Создаёт и возвращает объект QLineF, являющийся копией заданной прямой line, отображённой в систему координат, определяемую этой матрицей.

QPolygonF QMatrix::map(const QPolygonF &polygon) const

Это перегруженный метод.

Создаёт и возвращает объект QPolygonF, являющийся копией заданного многоугольника polygon, отображённого в систему координат, определяемую этой матрицей.

QPolygon QMatrix::map(const QPolygon &polygon) const

Это перегруженный метод.

Создаёт и возвращает объект QPolygon, являющийся копией заданного многоугольника polygon, отображённого в систему координат, определяемую этой матрицей. Обратите внимание, что преобразованные координаты округляются до ближайшего целого числа.

QRegion QMatrix::map(const QRegion &region) const

Это перегруженный метод.

Создаёт и возвращает объект QRegion, являющийся копией заданной области region, отображённой в систему координат, определяемую этой матрицей.

Вызов этого метода может быть достаточно дорогим, если используются вращения или сдвиги.

QPainterPath QMatrix::map(const QPainterPath &path) const

Это перегруженный метод.

Создаёт и возвращает объект QPainterPath, являющийся копией заданного пути path, отображённого в систему координат, определяемую этой матрицей.

QRectF QMatrix::mapRect(const QRectF &rectangle) const

Создаёт и возвращает объект QRectF, являющийся копией заданного прямоугольника rectangle, отображённого в систему координат, определяемую этой матрицей.

Координаты прямоугольника преобразуются с использованием следующих формул:

x' = m11*x + m21*y + dx
y' = m22*y + m12*x + dy

Если были указаны вращение или сдвиги, эта функция возвращает охватывающий прямоугольник. Чтобы получить точную область, в которую отображается заданный прямоугольник, используйте функцию mapToPolygon().

См. также mapToPolygon() и Основные операции с матрицами.

QRect QMatrix::mapRect(const QRect &rectangle) const

Это перегруженный метод.

Создаёт и возвращает объект QRect, являющийся копией заданного прямоугольника rectangle, отображённого в систему координат, определяемую этой матрицей. Обратите внимание, что преобразованные координаты округляются до ближайшего целого числа.

QPolygon QMatrix::mapToPolygon(const QRect &rectangle) const

Создаёт и возвращает представление заданного прямоугольника rectangle в виде QPolygon, отображённого в систему координат, определяемую этой матрицей.

Координаты прямоугольника преобразуются с использованием следующих формул:

x' = m11*x + m21*y + dx
y' = m22*y + m12*x + dy

Многоугольники и прямоугольники ведут себя немного по-разному при преобразовании (из-за округления целых чисел), поэтому matrix.map(QPolygon(rectangle)) не всегда совпадает с matrix.mapToPolygon(rectangle).

См. также mapRect() и Основные операции с матрицами.

void QMatrix::reset()

Сбрасывает матрицу до единичной матрицы, т.е. все элементы устанавливаются в ноль, за исключением m11 и m22 (определяющие масштаб), которые устанавливаются в 1.

См. также QMatrix(), isIdentity(), и Основные операции с матрицами.

QMatrix &QMatrix::rotate(qreal degrees)

Поворачивает систему координат на заданный угол degrees против часовой стрелки.

Обратите внимание, что если вы применяете QMatrix к точке, определённой в координатах виджета, направление поворота будет по часовой стрелке, поскольку ось y направлена вниз.

Возвращает ссылку на матрицу.

См. также setMatrix().

QMatrix &QMatrix::scale(qreal sx, qreal sy)

Масштабирует систему координат по оси x на sx и по оси y на sy, и возвращает ссылку на матрицу.

См. также setMatrix().

void QMatrix::setMatrix(qreal m11, qreal m12, qreal m21, qreal m22, qreal dx, qreal dy)

Устанавливает элементы матрицы в указанные значения m11, m12, m21, m22, dx и dy.

Обратите внимание, что эта функция заменяет предыдущие значения. QMatrix предоставляют удобные функции translate(), rotate(), scale() и shear() для управления различными элементами матрицы на основе текущей системы координат.

См. также QMatrix().

QMatrix &QMatrix::shear(qreal sh, qreal sv)

Сдвигает систему координат по оси x на sh и по оси y на sv, и возвращает ссылку на матрицу.

См. также setMatrix().

QMatrix &QMatrix::translate(qreal dx, qreal dy)

Перемещает систему координат на dx по оси x и dy по оси y, и возвращает ссылку на матрицу.

См. также setMatrix().

QVariant QMatrix::operator QVariant() const

Возвращает матрицу как QVariant.

Эта функция была введена в Qt 4.2.

bool QMatrix::operator!=(const QMatrix &matrix) const

Возвращает true если эта матрица не равна заданной matrix, в противном случае возвращает false.

QMatrix QMatrix::operator*(const QMatrix &matrix) const

Возвращает результат умножения этой матрицы на заданную matrix.

Обратите внимание, что умножение матриц не коммутативно, т.е. a*b != b*a.

QMatrix &QMatrix::operator*=(const QMatrix &matrix)

Это перегруженный метод.

Возвращает результат умножения этой матрицы на заданную matrix.

bool QMatrix::operator==(const QMatrix &matrix) const

Возвращает true если эта матрица равна заданной matrix, в противном случае возвращает false.

Связанные не члены

bool qFuzzyCompare(const QMatrix &m1, const QMatrix &m2)

Функция qFuzzyCompare предназначена для сравнения двух матриц с учётом погрешности.

Возвращает true, если m1 и m2 равны, учитывая небольшую погрешность для сравнения чисел с плавающей точкой; в противном случае возвращает false.

Эта функция была добавлена в Qt 4.6.

uint qHash(const QMatrix &key, uint seed = 0)

Возвращает значение хеша для key, используя seed в качестве начального значения для вычисления.

Эта функция была добавлена в Qt 5.6.

QPoint operator*(const QPoint &point, const QMatrix &matrix)

Это то же самое, что matrix.map(point).

См. также QMatrix::map().

QPointF operator*(const QPointF &point, const QMatrix &matrix)

То же самое, что matrix.map(point).

См. также QMatrix::map().

QLineF operator*(const QLineF &line, const QMatrix &matrix)

Это то же самое, что matrix.map(line).

См. также QMatrix::map().

QLine operator*(const QLine &line, const QMatrix &matrix)

Это то же самое, что matrix.map(line).

См. также QMatrix::map().

QPolygon operator*(const QPolygon &polygon, const QMatrix &matrix)

Это то же самое, что matrix.map(polygon).

См. также QMatrix::map().

QPolygonF operator*(const QPolygonF &polygon, const QMatrix &matrix)

Это то же самое, что matrix.map(polygon).

См. также QMatrix::map().

QRegion operator*(const QRegion &region, const QMatrix &matrix)

Это то же самое, что matrix.map(region).

См. также QMatrix::map().

QPainterPath operator*(const QPainterPath &path, const QMatrix &matrix)

Это то же самое, что matrix.map(path).

См. также QMatrix::map().

QDataStream &operator<<(QDataStream &stream, const QMatrix &matrix)

Записывает заданную matrix в заданный stream и возвращает ссылку на поток.

См. также Сериализация типов данных Qt.

QDataStream &operator>>(QDataStream &stream, QMatrix &matrix)

Считывает заданную matrix из заданного stream и возвращает ссылку на поток.

См. также Сериализация типов данных Qt.

© The Qt Company Ltd
Licensed under the GNU Free Documentation License, Version 1.3.
https://doc.qt.io/qt-5.14/qmatrix.html

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API