5

ズームインおよびズームアウトしてもサイズが変わらない塗りつぶされた楕円を QT で描画したいと考えています。今のところ、私は次のものを持っています:

QPen pen = painter->pen();
pen.setCosmetic(true);
pen.setWidth(5);
painter->setPen(pen);
QBrush brush = painter->brush();
brush.setStyle(Qt::SolidPattern);
painter->setBrush(brush);
painter->drawEllipse(p, 2, 2);

ズームアウトすると、境界と塗りつぶしの間に隙間ができます。2つの同心円のように見えます。ズームインすると、塗りつぶしが境界を超えて大きくなり、ディスクがどんどん大きくなります。これを修正する方法はありますか?ありがとう!

4

1 に答える 1

3

代わりに、ペンだけでなく、アイテム自体を「化粧品」にするItemIgnoresTransformationsflagに注目します。これが実際の例です:

#include <QtGui>

class NonScalingItem : public QGraphicsItem
{
public:
    NonScalingItem()
    { setFlag(ItemIgnoresTransformations, true); }

    QRectF boundingRect() const
    { return QRectF(-5, -5, 10, 10); }

    void paint(QPainter *painter, const QStyleOptionGraphicsItem *option, QWidget *widget)
    {
        QPen pen = painter->pen();
        pen.setCosmetic(true);
        pen.setWidth(5);
        pen.setColor(QColor(Qt::red));
        painter->setPen(pen);
        QBrush brush = painter->brush();
        brush.setStyle(Qt::SolidPattern);
        painter->setBrush(brush);
        painter->drawEllipse(QPointF(0, 0), 10, 10);
    }
};

int main(int argc, char *argv[])
{
    QApplication app(argc, argv);

    QGraphicsScene *scene = new QGraphicsScene;
    QGraphicsView *view = new QGraphicsView;
    NonScalingItem *item = new NonScalingItem;

    scene->addItem(item);
    view->setScene(scene);

    /* The item will remain unchanged regardless of whether
       or not you comment out the following line: */
     view->scale(2000, 2000);

    view->show();
    return app.exec();
}
于 2012-05-30T22:00:48.697 に答える