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));
Я не могу понять, что происходит, потому что я делаю те же операции. Любой совет? заранее спасибо