0

ユーザーがファイルを選択してQGraphicsViewに追加できるようにするプログラムを開発しています。アイテムの配置を除いて、すべてが正常に機能します。すべての画像が同じ位置に表示されます。ソースコードは以下の通り

//user action to add an image
    void MainWindow::on_actionMessage_triggered()
    {
        const int width = 150;
        const int height = 200;

        QString fileName = QFileDialog::getOpenFileName(this,"Open Image File",QDir::currentPath());

            QImage image(fileName);
            QGraphicsPixmapItem* item = new QGraphicsPixmapItem(QPixmap::fromImage(image));
            item->setScale(0.1);
            item->setFlags(QGraphicsItem::ItemIsMovable | QGraphicsItem::ItemIsSelectable);
            item->setPos(scene->items.count()*width,scene->items.count()*height);
            scene->addItem(item);
    }


//initialize Scene
    MainWindow::MainWindow(QWidget *parent) :  QMainWindow(parent), ui(new Ui::MainWindow)
    {
        ui->setupUi(this);
        this->setBaseSize(800, 600);

        scene = new QGraphicsScene(0,0,600,400);
        scene->setSceneRect(0,0,600,400);

        ui->graphicsView->setScene(scene);
        //ui->graphicsView->fitInView(scene.sceneRect());
        ui->graphicsView->show();
    }
4

3 に答える 3

1

QGraphicsSystem を使用する場合、アイテムの位置を設定および取得するときに影響を与える座標系について考える必要があります。

この場合、親を持たないアイテムの場合、Qt ドキュメントには、親がないとアイテムのシーン座標が設定されると記載されていますが、期待どおりにそれを行うにはシーンの知識が必要です。

したがって、setPos を呼び出す前にアイテムをシーンに追加してください。

于 2013-07-05T07:59:04.277 に答える
0

mapToscene 関数を使用してみてください。ex: mapToscene(Position Coordinates) 間違いなく機能します。

于 2016-08-17T02:44:10.820 に答える