Отправить путь к изображению для другой функции

у меня есть mainWindow и Dialog в Qt. Я открываю два изображения в MainWindow. После того, как я сделаю операции с изображением (обрезать, изменить размер, повернуть) в MainWindow. Я хочу отправить изображения другому window (QDialog) , Как я могу отправить его как parameter? Мой частичный код ниже;

MainWindow::MainWindow()
{
openButton_1 = new QPushButton(tr("Open"));
cropButton_1 = new QPushButton(tr("Crop"));
rotateButton_1 = new QPushButton(tr("Rotate"));
resizeButton_1 = new QPushButton(tr("Resize"));
doneButton = new QPushButton(tr("Done"));

....
....
....
....
....connect(openButton_1, SIGNAL(clicked()), this, SLOT(open1()));
connect(openButton_2, SIGNAL(clicked()), this, SLOT(open2()));

connect(doneButton, SIGNAL(clicked()), this, SLOT(done()));

// done () функция для открытия нового окна

void MainWindow::done()
{
CompareImage dialog(this);
dialog.exec();

}

// новое диалоговое окно

CompareImage::CompareImage( QWidget *parent ) : QDialog( parent )
{
pushButton = new QPushButton(tr("TesT"));

graphicsScene = new QGraphicsScene;
graphicsView = new QGraphicsView(graphicsScene);QVBoxLayout *mainLayout = new QVBoxLayout;
mainLayout->addWidget( pushButton );
mainLayout->addWidget( graphicsView );
setLayout( mainLayout );
}

// А вот и моя функция open ()

void MainWindow::open( int signal )
{
QString fileName = QFileDialog::getOpenFileName(this,
tr("Open File"), QDir::currentPath());
if (!fileName.isEmpty()) {
QImage image(fileName);
if (image.isNull()) {
QMessageBox::information(this, tr("Image Viewer"),
tr("Cannot load %1.").arg(fileName));
return;
}
QGraphicsPixmapItem* item = new QGraphicsPixmapItem(QPixmap::fromImage(image));

if( signal == 1 )
{
graphicsScene_1->addItem(item);
graphicsView_1->show();
}
else if(signal == 2)
{
graphicsScene_2->addItem(item);
graphicsView_2->show();
}

}
}

Это выглядит хорошей идеей для использования QGraphicsPixmapItem* item но я не смог сделать это .. Не могли бы вы помочь мне? Спасибо за идеи ..

> РЕДАКТИРОВАТЬ: здесь также моя функция open1 и open2, чтобы ясно понять ситуацию ..

void MainWindow::open1()
{
open( 1 );
}

void MainWindow::open2()
{
open( 2 );
}

0

Решение

Хороший способ сделать это будет использовать сигналы / слоты
1. В декларации главного окна добавьте что-то вроде:

signals:
void ImageProcessingDone(QImage& image);

2. В вашем диалоге объявите слот

public slosts:
void RecevedProcessedImage(QImage& image);

3. Слот Implpement для обработки изображения.
4. В конструкции главного окна подключите сигнал и слот.
Поэтому, когда обработка вашего изображения будет завершена, просто напишите в MainWindow emit ImageProcessingDone (imageInstance), и он будет перенесен в ваш диалог

1

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]