0

カスタム アイテムの cpp:

MapNode::MapNode(qreal x, qreal y, qreal w, qreal h, QGraphicsItem *parent)
{
    this->x = x;
    this->y = y;
    this->w = w;
    this->h = h;
}

QRectF MapNode::boundingRect() const
{
    return QRectF(DeafultX, DeafultY, DeafultW, DeafultH);
}

void MapNode::paint(QPainter *painter, const QStyleOptionGraphicsItem *option, QWidget *widget)
{
    QBrush redBrush(Qt::red);
    QPen blackPen(Qt::black);
    blackPen.setWidth(1);
    painter->setBrush(redBrush);
    painter->setPen(blackPen);
    painter->drawRect(x,y,w,h);
}

シーンに追加:

MainWindow::MainWindow(QWidget *parent) :
    QMainWindow(parent),
    ui(new Ui::MainWindow)
{
    ui->setupUi(this);
    scene = new QGraphicsScene(this);
    ui->graphicsView->setScene(scene);

    QBrush redBrush(Qt::red);
    QPen blackPen(Qt::black);
    blackPen.setWidth(1);

    for(int i = 0; i < 992; i+=62)
    {
        for(int j = 0; j < 992; j+=62)
        {
            QGraphicsItem *myItem = new MapNode(i,j,60,60);
            scene->addItem(myItem);
            //scene->addRect(i,j,60,60,blackPen,redBrush); //working fine
        }
    }
}
  • アイテムを追加すると、グラフィック ビューの中央から描画が開始されます (グラフィック ビューの配置を中央に設定すると、addRect でうまく機能します)。さらにアイテムを追加すると、グラフィック ビュー画面でスクロール バーが動作していることを確認できます。私のアイテムを追加すると、それらは無効になります。
  • グラフィックス ビューから、Rect (addRect) をシーンに追加したときと同じ動作、特に ScrollBarAsNeeded と配置オプションを取得しようとしています。

ありがとう!

4

1 に答える 1

0

あなたの境界四角形は完全に正しくありません。アイテムの形状が長方形であると仮定すると、境界四角形は、ペイント イベントで描画する四角形と同じである必要があります。したがって、ペイントイベントでは、呼び出すことができるはずですpainter->drawRect(boundingRect());

あなたがしていることに対する別のアプローチは、QGraphicsItem の位置 ( QGraphicsItem::setPos())を利用することであることに注意してください。

for(int i = 0; i < 992; i+=62)
{
    for(int j = 0; j < 992; j+=62)
    {
        QGraphicsItem *myItem = new MapNode(0, 0, 60, 60);
        myItem->setPos(i, j);
        scene->addItem(myItem);
    }
}

これは少しきれいだと思いますが、それはあなた次第です。

于 2012-11-09T21:13:32.850 に答える