10

の驚くべき機能の 1 つQGraphicsViewは、シーンのコンテンツ (実際にシーンに挿入されたすべての QGraphicsItem) に合わせてスケーリングできることです。スケールを正しく挿入したQPixmapことは、これで 4x4 のスケール ファクターを指定した場合を意味します。

view->scale(4,4);

Pixmap は思い通りにズームされます。

しかし、これは私が描き慣れている四角形には当てはまりません。それらは、シーンに描画するピックスマップを囲むことを目的としており、スケール係数に関係なく、4 ではなく 1 の厚さを維持します。

「化粧ペン」の正確な目的を理解しようとして、そのすべてに関するドキュメントを検索してきましたが、それでも長方形を太くすることはできません.

最後の通知: カスタムがQGraphicsItemあり、長方形を描画するために使用される QPen は、オンザフライでインスタンス化されます。

virtual void paint(QPainter *painter, const QStyleOptionGraphicsItem *option, QWidget *widget);

方法。

それは問題ですか?

事前に感謝し、Qt フレームワークと描画アルゴリズムの両方の分野で経験/知識が不足していることをお詫びします...

4

1 に答える 1

17

QPenをどこでインスタンス化するかは実際には重要ではありません。

QPenのデフォルトの幅は0です。これは、コスメティックがtrueで、幅が実際には1であることを意味する特別な値です。したがって、ペンをコスメティックにしたくない場合は、目的の幅に設定する必要があります。また、コスメティックをfalseに設定する必要がある場合もあります。

簡単な例を次に示します。

#include <QtGui>

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

    QGraphicsView view;
    QGraphicsScene scene;

    QGraphicsRectItem *item1 = scene.addRect(20, 20, 20, 20);
    QGraphicsRectItem *item2 = scene.addRect(50, 20, 20, 20);

    QPen pen1, pen2;
    pen1.setWidth(5);
    pen2.setWidth(5);
    pen1.setCosmetic(true);
    pen2.setCosmetic(false);

    item1->setPen(pen1);
    item2->setPen(pen2);

    view.setScene(&scene);
    view.scale(4, 4); // both rects are the same size, but one a has wider pen
    view.show();

    return a.exec();
}
于 2012-10-29T12:08:51.753 に答える