2013-09-05 2 views
0

У меня есть 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())); 

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

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); 
} 

// А вот и моя открытая функция()

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

Не могу понять, как вы посылаете сигнал для открытия функции? что такое значение сигнала при вызове open? – Kunal

+0

Я использую два открытых слота: open1() и open2(), таким образом, я могу отправить сигнал. Я не вызываю функцию Open с помощью кнопок. Я вызываю функцию open() в другой функции со значениями, такими как open (1) или open (2) – goGud

+0

'Хорошая идея использовать элемент QGraphicsPixmapItem *, но я не мог сделать это' Что вы подразумеваете под этим, вы не смогли бы это сделать? ? – thuga

ответ

1

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

signals: 
    void ImageProcessingDone(QImage& image); 

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

public slosts: 
    void RecevedProcessedImage(QImage& image); 

3. Слот для обработки изображения.
4. В конструкторе основного окна подключите сигнал и слот.
Итак, когда ваша обработка изображений будет выполнена, просто напишите в MainWindow, испустите ImageProcessingDone (imageInstance), и она будет перенесена в ваш диалог.

Смежные вопросы