Я новичок в Qt. Я представляю события из своего приложения в качестве полигонов в своей сцене, используя пользовательский класс, который наследует QGraphicsPolygomItem
. Размеры полигона равны (event duration, fixed height)
, используя 1s: 1px. Длительность события может быть как 1E-6, так что я просто масштабировать мой взгляд, так что меньше полигонов масштабируется до MIN_POLY_WIDTH
(10px):Qt: Масштабы полигонов, но не детей
view->scale(qreal(MIN_POLY_WIDTH/min_event_duration), qreal(1.0));
До сих пор так хорошо. Тем не менее, у меня есть QGraphicsTextItem
ребенка для каждого полигона, которые получают простиралась от операции масштаба до точки, которые они получают путь вне границ полигона:
Текст элемент создается следующим образом:
void EventPolygon::setId(QString id) {
if (!this->id) {
this->id = new QGraphicsTextItem(id, this);
} else {
this->id->setPlainText(id);
}
this->id->setPos(0, this->polygon().boundingRect().height()/2 - this->id->boundingRect().height()/2);
}
Эта функция обычно вызывается конструктором EventPolygon
. Я, хотя это была проблема, поскольку scale
выполняется после того, как все элементы добавлены в сцену, так что это повлияет на текстовые элементы. Поэтому я попытался позвонить setId
после операции масштабирования, итерации по всем элементам сцены. Таким образом, хотя бы были растянуты только многоугольники. Это было не так, и текст оставался растянутым.
Я также попытался использовать следующие вместо scale
:
QTransform t = QTransform();
t.scale(qreal(MIN_POLY_WIDTH/min_event_duration), qreal(1.0));
view->setTransform(t, false);
Я думал, «ложь» позволит избежать преобразования, внесенной в многоугольников детей, однако, кажется, что это не так. Можно ли каким-либо образом масштабировать полигоны до минимальной ширины 10 пикселей и иметь в них читаемый текст?
Я вижу, сейчас я изменю соотношение и буду больше читать об организации сцены. Благодарю. – Alex