QT5 с использованием setTranslation ws just painter.translate - PullRequest
0 голосов
/ 06 апреля 2020

Я рисую часы, поэтому когда дело доходит до рисования номеров часов, я использую этот код:

for (int i = 0; i < 12; ++i) {

    double radius = 85;

    int numeral = i + 1;
    double radians = numeral * 2.0 * M_PI / 12;
    QPoint pos = rect().center() + QPoint(radius * std::sin(radians), -radius * std::cos(radians));

    int x_fix = 2;
    int y_fix = 0;

    switch (i+1) {
    case 7:
        y_fix=3;
        x_fix=-1;
        break;
    case 10:
    case 11:
        x_fix=-4;
        break;
    }

    QTransform t;
    t.translate(pos.x()+x_fix, pos.y()+y_fix);
    painter.setTransform(t);

    painter.drawText(QRect(-(INT_MAX / 2), -(INT_MAX / 2), INT_MAX, INT_MAX), Qt::AlignCenter, QString("%1").arg(numeral));
}

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

QTransform t;
t.translate(pos.x()+x_fix, pos.y()+y_fix);
painter.setTransform(t);

просто

painter.translate(pos.x()+x_fix, pos.y()+y_fix);

я вообще не видел чисел

Можете ли вы объяснить мне, как именно работает QTransform?

, когда вы используете painter.translate или painter.rotate it как цепные вызовы и делают преобразование шаг за шагом, но QTransform кажется нет.

...