Я рисую часы, поэтому когда дело доходит до рисования номеров часов, я использую этот код:
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 кажется нет.