2

Qtを使用してC++でペイントアプリケーションを作成しようとしています。マウスをクリックまたはクリックアンドドラッグするたびに、プログラムはピックスマップ上に何かを描画します。その後、paintEvent()を呼び出してウィンドウを更新します。これにより、ピックスマップがウィンドウに描画されます。

void QPaintArea::mousePressEvent(QMouseEvent *event){
    startpoint = event->pos();
    drawPoint(startpoint);
    is_pressed = true;
}

void QPaintArea::mouseReleaseEvent(QMouseEvent *event){
    is_pressed = false;
}

void QPaintArea::mouseMoveEvent(QMouseEvent *event){
    if(is_pressed == true){
        endpoint = event->pos();
        drawLine(startpoint, endpoint);
        startpoint = endpoint;
    }
    else{
        return;
    }
}

void QPaintArea::paintEvent(QPaintEvent *event){
    QDesktopWidget *desktop = QApplication::desktop();
    int x = (desktop->width() - 800) / 2;
    int y = (desktop->height() - 600) / 2;
    QPainter painter(this);
    QRect target(QPoint(x, y - 35), QSize(800, 600));
    QRect dirtyrect(QPoint(0,0), QSize(800, 600));
    painter.drawPixmap(target, *pixmap, dirtyrect);
}

問題は、プログラムがピックスマップをウィンドウに期待どおりに印刷していないことです。たとえば、x:17、y:82でマウスを押して、何かを描画しようとしています。プログラムは私が描いたものを印刷しますが、x + 20、yのようなオフセット位置にあります。

QRectまたはdrawPixmapがどのように機能するかを完全には理解していないかもしれませんが、pixmapは800x600です。「dirtyrect」は、ピックスマップ全体を保存することになっています(ax:0、y:0、サイズ800x600から開始)。

4

1 に答える 1