2012-05-30 33 views
4

我想在QT中繪製一個填充橢圓,在放大和縮小時不會改變其大小。現在我有以下幾點:在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個同心圓。當我放大填充物時,邊界越來越大,磁盤越來越大。任何想法如何解決這個問題?謝謝!

回答

2

我反而會看ItemIgnoresTransformations flag,這將使物品本身「美觀」,而不僅僅是筆。這是一個工作示例:

#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(); 
} 
+0

只需添加'QGraphicsItem :: ItemIgnoresTransformations'將導致橢圓消失。在谷歌快速搜索顯示一些人有同樣的問題。你是否真的知道這個問題可能是什麼? – shalabuda

+0

@shalabuda我不確定。我編輯了我的答案,包括一個工作示例。也許你可以從這個例子開始,看看它與你的實現有什麼關係。 – Anthony

+0

感謝這個例子! – shalabuda