错误:操作数不匹配

时间:2014-11-25 14:09:54

标签: c++ qt qgraphicsscene

我尝试实施捕捉但是收到错误

error: no match for 'operator%' (operand types are 'const int' and 'const QSize')
     const int firstLeftGridLine = realLeft - (realLeft % gridSize);

我的代码如下: cadgraphicsscene.cpp

    void CadGraphicsScene::drawBackground(QPainter *painter, const QRectF &rect)
    {
        const int realLeft = static_cast<int>(std::floor(rect.left()));
        const int realRight = static_cast<int>(std::ceil(rect.right()));
        const int realTop = static_cast<int>(std::floor(rect.top()));
        const int realBottom = static_cast<int>(std::ceil(rect.bottom()));

        // Draw grid.
        const int firstLeftGridLine = realLeft - (realLeft % gridSize);
        const int firstTopGridLine = realTop -(realTop % gridSize);
        QVarLengthArray<QLine, 100> lines;

        for (qreal x = firstLeftGridLine; x <= realRight; x += gridSize)
            lines.append(QLine(x, realTop, x, realBottom));
        for (qreal y = firstTopGridLine; y <= realBottom; y += gridSize)
            lines.append(QLine(realLeft, y, realRight, y));

        painter->setPen(QPen(QColor(220, 220, 220), 0.0));
        painter->drawLines(lines.data(), lines.size());

        // Draw axes.
        painter->setPen(QPen(Qt::lightGray, 0.0));
        painter->drawLine(0, realTop, 0, realBottom);
        painter->drawLine(realLeft, 0, realRight, 0);
    }

void CadGraphicsScene::mousePressEvent(QGraphicsSceneMouseEvent *mouseEvent)
{
    mDragged = qgraphicsitem_cast<QGraphicsItem*>(itemAt(mouseEvent->scenePos(),
QTransform()));
    if (mDragged) {
        mDragOffset = mouseEvent->scenePos() - mDragged->pos();
    } else
        QGraphicsScene::mousePressEvent(mouseEvent);
}

void CadGraphicsScene::mouseReleaseEvent(QGraphicsSceneMouseEvent *mouseEvent)
{
   if (mDragged) {
        int x = floor(mouseEvent->scenePos().x() / gridSize.width()) * gridSize.width();
        int y = floor(mouseEvent->scenePos().y() / gridSize.height()) * gridSize.height();
        mDragged->setPos(x, y);
        mDragged = 0;
    } else
        QGraphicsScene::mouseReleaseEvent(mouseEvent);
}

void CadGraphicsScene::mouseMoveEvent(QGraphicsSceneMouseEvent *mouseEvent)
{
    if (mDragged) {
        // Ensure that the item's offset from the mouse cursor stays the same.
        mDragged->setPos(mouseEvent->scenePos() - mDragOffset);
    } else
        QGraphicsScene::mouseMoveEvent(mouseEvent);
}

cadgraphicsscene.h

private:
    const QSize gridSize;
    QGraphicsItem *mDragged;
    QPointF mDragOffset;

protected:
    void mousePressEvent(QGraphicsSceneMouseEvent *mouseEvent);
    void mouseReleaseEvent(QGraphicsSceneMouseEvent *mouseEvent);
    void mouseMoveEvent(QGraphicsSceneMouseEvent *mouseEvent);

我在cadgraphicsscene.cpp文件中收到错误。你能帮我解决一下这个错误吗?

1 个答案:

答案 0 :(得分:2)

QSize是一个描述二维尺寸(宽度和高度)的类。我怀疑你打算使用

realLeft % gridSize.width()

realTop  % gridSize.height()

分别