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 回答
1

我在这里分享了工作代码。

https://stackoverflow.com/a/45280054/1999190

此外,如果您希望默认位置在顶部,而不是中心,只需更改 graphicsView 的对齐方式。

 ui->graphicsView->setAlignment( Qt::AlignLeft | Qt::AlignTop );
于 2017-07-24T12:04:48.910 回答
0

尝试使用 mapToscene 函数。例如:mapToscene(Position Coordinates) 它肯定会起作用。

于 2016-08-17T02:44:10.820 回答