0

これは、チェス盤を生成するための私の簡単なコードです。最初に、図の場所のように機能する四角形が追加されます。次に、図のpngを含むQPixmapが重ねて表示されます。一部の図はその四角形の下にあるため、表示されません。rect (scene->addRect...) を追加しているコメント行に入れると、うまく見えます。なんで?アイテムを表示する順番に描いています。

for (int column = 0; column < 8; column++) {

            if ((row + column) % 2) {
                scene->addRect(row * 50, column * 50, 50, 50, greyPen, greyBrush);
            }
            else {
                scene->addRect(row * 50, column * 50, 50, 50, whitePen, whiteBrush);
            }
            int figure = chessboard->getFigureOnPos(row, column);

            if (figure == Dama::Chessboard::DAMA_BLACK) {
                    QGraphicsItem * item = scene->addPixmap(dama_black);
                    item->setPos(column * 50, row * 50);
            }
            else if (figure == Dama::Chessboard::DAMA_WHITE) {
                QGraphicsItem * item = scene->addPixmap(dama_white);
                item->setPos(column * 50, row * 50);
            }
            else if (figure == Dama::Chessboard::PANAK_BLACK) {
                QGraphicsItem * item = scene->addPixmap(panak_black);
                item->setPos(column * 50, row * 50);
            }
            else if (figure == Dama::Chessboard::PANAK_WHITE) {
                QGraphicsItem * item = scene->addPixmap(QPixmap(panak_white));
                item->setPos(column * 50, row * 50);
            }
        }
4

1 に答える 1

1

QGraphicsItem には setZValue という関数があり、値の高いアイテムが上に描画されるようにアイテムの積み重ね順序を設定します。デフォルトでは、すべての項目がゼロに設定されます。アイテムがシーン内の正しい位置にある場合は、図の z 値を四角形よりも高い値に設定します。

于 2013-05-03T08:35:08.067 に答える