Qt отправка изображения между диалогами

Я пишу простое приложение с 2 диалогами, первое для одного исходного изображения, которое отправляется в другой диалог и обрабатывается. Затем обработанное изображение отправляется обратно в первый диалог:

ImageDialog::ImageDialog(QWidget *parent) : QDialog(parent), ui(new Ui::ImageDialog)
{
    ui->setupUi(this);
    ui->graphicsView->setScene(&mScene);
    mPixmapItem = new QGraphicsPixmapItem();

    connect( this,      SIGNAL( sigCommitImage(QImage) ),
             parent,    SLOT( updateImage(QImage) ) );
}

ImageDialog::~ImageDialog()
{
    delete ui;
    delete mPixmapItem;
}

void ImageDialog::processImage(const QImage &image )
{
    cv::Mat tmp(image.height(),image.width(),CV_8UC4,(uchar*)image.bits(),image.bytesPerLine());
    cv::cvtColor(tmp, tmp, CV_RGBA2GRAY);

    mImage = QImage( (uchar*)tmp.data, tmp.cols, tmp.rows, tmp.step, QImage::Format_Indexed8 );

    mPixmapItem->setPixmap(QPixmap::fromImage(mImage));
    mScene.clear();
    mScene.addPixmap(QPixmap::fromImage(mImage));
    mScene.setSceneRect(0, 0, mImage.width(), mImage.height());
    ui->graphicsView->fitInView(mPixmapItem, Qt::KeepAspectRatio);
}

void ImageDialog::on_buttonBox_accepted()
{
    emit( sigCommitImage( mImage ) );
}

и есть фрагмент для главного окна

mPixelInfoDialog = new PixelInfoDialog( this );
connect( this,          SIGNAL( sigPixelInfoDialog(QPixmap, QPointF) ),
         mPixelInfoDialog, SLOT( updateClip(QPixmap, QPointF) ) );

mImageDialog = new ImageDialog( this );
connect( this,          SIGNAL( sigImageDialog(QImage) ),
     mImageDialog,  SLOT( processImage(QImage) ) );

void MainWindow::updateImage(const QImage &image)
{
    showImage( image );
}

void MainWindow::showImage(const QImage &image)
{
    mImage = image;
    mPixmapItem->setPixmap(QPixmap::fromImage(image));
    mScene.clear();
    mScene.addPixmap(QPixmap::fromImage(image));
    mScene.setSceneRect(0, 0, image.width(), image.height());
    ui->graphicsView->fitInView(mPixmapItem, Qt::KeepAspectRatio);
}

    void MainWindow::on_action_Open_triggered()
    {
        QString path = QFileDialog::getOpenFileName();

        if( path.isEmpty() )
        {
            return;
        }

        QImage image(path);
        if( image.isNull() )
            return;

        showImage( image );

        /*
         * Update other open dialogs
         */

        if( mImageDialog->isEnabled() )
        {
            emit( sigImageDialog( mImage ) );
        }

    }

Изображение правильно загружено, отправлено в ImageDialog и обработано, но когда я пытаюсь отправить изображение обратно, в результате получается куча случайных пикселей или происходит сбой приложения.

mPixmapItem->setPixmap(QPixmap::fromImage(image));

Я не могу понять, что происходит, потому что я делаю те же операции. Любой совет? заранее спасибо

0 ответов

Другие вопросы по тегам