Tôi có một QGraphicsTextItem được đặt vào một QGraphicsItem. Tôi muốn QGraphicsTextItem luôn nằm trực tiếp trên QGraphicsItem, nhưng tôi cũng muốn văn bản vẫn giữ nguyên kích thước khi hệ số tỷ lệ nhỏ hơn 1, tức là văn bản vẫn ở kích thước nó ở hệ số tỷ lệ 1 ngay cả khi đồ họa gốc mục được thu nhỏ lại. Tôi đã thấy rằng đặt cờ QGraphicsItem::ItemIgnoresTransformations
thành true khi hệ số tỷ lệ dưới 1 sẽ thực hiện thủ thuật để giữ lại kích thước.Duy trì vị trí con tương đối sau khi áp dụng QGraphicsItem :: ItemIgnoresTransformations
Nhưng dường như tôi không tìm được cách để giữ vị trí của văn bản luôn ở trên QGraphicsItem. Có cách nào để làm việc này không? Tôi đã thử sử dụng chức năng deviceTransform()
, nhưng văn bản vẫn chuyển động khỏi QGraphicsItem khi tôi cuộn ra. Điều tồi tệ hơn là một số mục văn bản bắt đầu “cười khúc khích”, tức là họ bắt đầu liên tục thay đổi vị trí của họ từ trước đến giờ, để trông giống như họ đang run rẩy. Nếu đây là chức năng tôi cần sử dụng, tôi đoán tôi không biết cách sử dụng nó đúng cách.
Trong constructor của QGraphicsItem của tôi, tôi đã thêm một QGraphicsTextItem:
fTextItem = new QGraphicsTextItem(getName(), this);
fTextItem->setFlag(QGraphicsItem::ItemIgnoresTransformations);
Dưới đây là đoạn mã từ chức năng sơn của QGraphicsItem
qreal lod = painter->worldTransform().m22();
if(lod <= 1.0) {
fTextItem-setFlag(QGraphicsItem::ItemIgnoresTransformations);
fTextItem->setPos(fTextItem->deviceTransform(view-viewportTransform()).inverted().map(view->mapFromScene(mapToScene(0,0))));
} else {
fTextItem->setFlag(QGraphicsItem::ItemIgnoresTransformations, false);
fTextItem->setPos(0, 0);
}
không nên bạn thiết lập QGraphicsTextItem đối tượng cờ để bỏ qua sự biến đổi cha mẹ thay vì các QGraphicsItem? – ArmenB