Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/qt/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/visual-studio-code/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
访问每个选项卡上的QGraphicsView(在QTabWidget中)_Qt_Qgraphicsview_Qgraphicsscene_Qtabwidget - Fatal编程技术网

访问每个选项卡上的QGraphicsView(在QTabWidget中)

访问每个选项卡上的QGraphicsView(在QTabWidget中),qt,qgraphicsview,qgraphicsscene,qtabwidget,Qt,Qgraphicsview,Qgraphicsscene,Qtabwidget,我在QGraphicscene和QGraphicsView上的一个新选项卡中打开了每个图像 void MainWindow::on_actionOpen_triggered() { QString fileName = QFileDialog::getOpenFileName(this, tr("Open File"), QDir::currentPath()); if (!fileName.isEmpty()) { QIma

我在QGraphicscene和QGraphicsView上的一个新选项卡中打开了每个图像

    void MainWindow::on_actionOpen_triggered()
    {
        QString fileName = QFileDialog::getOpenFileName(this, tr("Open File"), QDir::currentPath());
        if (!fileName.isEmpty()) {
           QImage image(fileName);
            if (image.isNull()) {
               QMessageBox::information(this, tr("Master Measure"),
                                tr("Cannot load %1.").arg(fileName));
               return;
            }

            scene = new QGraphicsScene;
            view = new QGraphicsView;

           view->setScene(scene);
           tabWidget->addTab(view,"someTab");

           scene->addPixmap(QPixmap::fromImage(image));
           scene->setBackgroundBrush(QBrush(Qt::lightGray, Qt::SolidPattern));

           QFileInfo fileInfo = fileName;
           tabWidget->setTabText(ui->tabWidget->count()-1, fileInfo.baseName());
           tabWidget->setCurrentIndex(ui->tabWidget->count()-1);
        }
    }
我想通过单击在每个图像上绘制一些东西

所以我通过点击新闻事件做到了这一点

void MainWindow::mousePressEvent(QMouseEvent *event)
{
     QPen pen(Qt::black);
     QBrush brush(Qt::red);
     pen.setWidth(6);
     scene->addEllipse(0,0,1000,500,pen,brush);
}
它只是在上次打开的图像(选项卡)上绘制椭圆

我不知道如何解决这个问题

我很感激你的建议。
谢谢。

显然
场景
变量指向上次创建的场景。创建新场景时,旧指针将丢失,因为您没有将其保存到任何位置。因此,您需要在某个位置保留所有场景和视图指针,并使用当前可见的对象

我建议您创建一个负责每个选项卡内容的
QGraphicsView
子类(我们称之为
MyView
)。将文件名传递给此对象的构造函数。在构造函数中,创建场景并将其存储在成员变量中。重新实现
MyView::mousePressEvent
以执行绘图

然后,您可以添加如下新选项卡:

MyView* view = new MyView(filename);
view ->addTab(view,"someTab");

当用户单击视图时,将调用
MyView::mousePressEvent
方法或相应的
MyView
对象。每个视图将只看到自己的
场景
变量,并且相应的场景将被编辑。

谢谢,您的权利。我会照你说的做,我会分担后果。