enter image description here

enter image description here

Menandai jarum pada speedometer.

// 이미지 출력
QPixmap pix("C:\\Users\\WORK002\\Desktop\\speedmeter.png");
QPixmap pix2("C:\\Users\\WORK002\\Desktop\\pointer.png");
QPixmap pointer = pix2.scaled(300, 300);


scene.addPixmap(pix);
scene.addPixmap(pointer);
ui-> graphicsView ->setScene(&scene);
ui-> graphicsView ->show();

enter image description here

Saya ingin memutar dan memposisikan ulang.

Bagaimana saya bisa melakukan ini?

2
김지태 8 Januari 2021, 10:18

3 jawaban

Jawaban Terbaik

Anda tidak perlu mengacaukan QPixmap, Anda dapat memanipulasi QGraphicsPixmapItem yang dikembalikan oleh QGraphicsScene::addPixmap:

QGraphicsPixmapItem *pixmap_item = scene.addPixmap(pix);

Untuk mengatur posisi, Anda dapat menggunakan QGraphicsItem::setPos.

Untuk menyetel rotasi, pertama-tama setel titik asal transformasi dengan QGraphicsItem::setTransformOriginPoint< /a>,(ini akan mengatur titik di mana item Anda akan diputar) dan kemudian mengatur rotasi dengan rel QGraphicsItem::setRotation:

pixmap_item->setPos(50, 0);
pixmap_item->setTransformOriginPoint(pixmap_item->boundingRect().center());
pixmap_item->setRotation(90);

Anda harus menetapkan sendiri nilai-nilai yang benar, tetapi ini akan mengarahkan Anda ke jalan yang benar.

3
thuga 11 Januari 2021, 12:25

Anda dapat melihat QPixmap::transformed()

QPixmap QPixmap::transformed(const QTransform &transform, Qt::TransformationMode mode = Qt::FastTransformation) const

Spesifikasi dapat diberikan melalui objek QTransform:

  • rotate() untuk rotasi
  • translate() untuk reposisi
2
Ngoc Minh Nguyen 8 Januari 2021, 07:39

Smoga yg ini bisa membantu :

//Please note this method takes 2 mseg to finish for a 20x20 pixmap.
QPixmap rotatedPixmap(m_pixOriginal.size());
rotatedPixmap.fill(QColor::fromRgb(0, 0, 0, 0)); //the new pixmap must be transparent.

QPainter* p = new QPainter(&rotatedPixmap);
QSize size = m_pxOriginal.size();
p->translate(size.height()/2,size.height()/2);
p->rotate(m_iAngle);
p->translate(-size.height()/2,-size.height()/2);
p->drawPixmap(0, 0, m_pxOriginal);
p->end();
delete p;
m_pxItem->setPixmap(rotatedPixmap);

Disalin dari: Baca utas forum ini

2
Noir 8 Januari 2021, 07:44