Skip to content
  • Categories
  • Recent
  • Tags
  • Popular
  • Users
  • Groups
  • Search
  • Get Qt Extensions
  • Unsolved
Collapse
Brand Logo
  1. Home
  2. Qt Development
  3. General and Desktop
  4. QFileDialog problem [SOLVED]

QFileDialog problem [SOLVED]

Scheduled Pinned Locked Moved General and Desktop
qfiledialogerrornot renderingqwidget
4 Posts 2 Posters 3.2k Views
  • Oldest to Newest
  • Newest to Oldest
  • Most Votes
Reply
  • Reply as topic
Log in to reply
This topic has been deleted. Only users with topic management privileges can see it.
  • A Offline
    A Offline
    annettaws
    wrote on last edited by annettaws
    #1

    Hi,
    I've an application with a QWidget that have a my personalized QWidget to show images and multiple buttons, one of it open a QFileDialog to save a file, but it does not work properly it seems that does not render correctly.
    The really strange things is that if I don't open an Image in the my qwidget it work correctly, but in the other case I have this QFileDialog:
    http://postimg.org/image/pz3olh7qd/
    or this:
    http://postimg.org/image/semsddtft/
    The code is:
    void AnalyzerForm::on_buttonSavePatternParams_clicked()
    {
    QString filename = QFileDialog::getSaveFileName(this, tr("Save file"), "./"+selectedFile, tr("_pp.yml"));
    filename = filename + "_pp.yml";
    controller->savePatternParams(filename.toStdString());
    }
    And the code to open the image is:
    void CVWidget::showImage(QImage image)
    {
    orig_image = QPixmap::fromImage(image);
    m_imageLabel->setPixmap(orig_image);
    }
    I tried to commented out the line with the setPixmap instruction, and the QFileDialog works.
    What could be the problem between this two functions?
    Sorry for my english.

    J 1 Reply Last reply
    0
    • A annettaws

      Hi,
      I've an application with a QWidget that have a my personalized QWidget to show images and multiple buttons, one of it open a QFileDialog to save a file, but it does not work properly it seems that does not render correctly.
      The really strange things is that if I don't open an Image in the my qwidget it work correctly, but in the other case I have this QFileDialog:
      http://postimg.org/image/pz3olh7qd/
      or this:
      http://postimg.org/image/semsddtft/
      The code is:
      void AnalyzerForm::on_buttonSavePatternParams_clicked()
      {
      QString filename = QFileDialog::getSaveFileName(this, tr("Save file"), "./"+selectedFile, tr("_pp.yml"));
      filename = filename + "_pp.yml";
      controller->savePatternParams(filename.toStdString());
      }
      And the code to open the image is:
      void CVWidget::showImage(QImage image)
      {
      orig_image = QPixmap::fromImage(image);
      m_imageLabel->setPixmap(orig_image);
      }
      I tried to commented out the line with the setPixmap instruction, and the QFileDialog works.
      What could be the problem between this two functions?
      Sorry for my english.

      J Offline
      J Offline
      Jakob
      wrote on last edited by
      #2

      @annettaws Some questions that come to mind:

      • which Qt version?
      • How are the two pieces of code related? I don't see any call of showImage in the first part
      • orig_image is not declared/defined anywhere, and doesn't look to be a member - it seems like you tried to create some minimal example, but you striped away way too much. I don't think many are capable to help you it based on this (unless someone happens to have seen the same effect and remembers why)

      So maybe, expand a bit on your example, and make it into a compiling example if you can.

      1 Reply Last reply
      0
      • A Offline
        A Offline
        annettaws
        wrote on last edited by
        #3

        @Jakob:
        I'm using the Qt 5.4.2.
        I've a QWidget and the myQWidget to show the images is a member of his ui ( I added graphicaly a widget and promoted to my class).
        Below there are all the code of the two Qwidges:
        CVWidget is the Widget to show Images
        CVWidget::CVWidget(QWidget *parent) : QWidget(parent)
        {

        m_layout = new QVBoxLayout;
        m_imageLabel = new QLabel;
        m_layout->addWidget(m_imageLabel);
        setLayout(m_layout);
        startSelection = false;
        corner1 = QPoint();
        corner2 = QPoint();
        startRadius = false;
        startSearchArea = false;
        

        }

        CVWidget::~CVWidget(){}

        void CVWidget::setAnalyzerForm(AnalyzerForm * analyzerForm)
        {

        _analyzerForm = analyzerForm;
        form = 'a';
        

        }
        void CVWidget::setTrainerForm(TrainerForm * trainerForm)
        {

        _trainerForm = trainerForm;
        form = 't';
        

        }
        void CVWidget::setController(ControllerQt * controller)
        {

        contr = controller;
        

        }

        void CVWidget::showImage(QImage image)
        {

        orig_image = QPixmap::fromImage(image);
        m_imageLabel->setPixmap(orig_image);
        

        }

        QImage CVWidget::getCurrentImageShowed()
        {

        return m_imageLabel->pixmap()->toImage();
        

        }
        void CVWidget::mousePressEvent(QMouseEvent *mouseEvent)
        {

        this->setCursor(Qt::CrossCursor);
        if( form == 'a')
        {
            if (_analyzerForm->radioBSelectionBoxIsSelected())
            {
                startSelection = true;
                corner1 = mouseEvent->localPos().toPoint();
                _analyzerForm->showStatusBarMessage(QString("To add the Selction Box press 'a'. To store all press the button."),
                    QString("red"));
            }
            if (_analyzerForm->radioBRadiusIsSelected())
            {
                startRadius = true;
                corner1 = mouseEvent->localPos().toPoint();
                _analyzerForm->showStatusBarMessage(QString("Save current MSD-PR press 'a'.After the Detection press 's' to add msd params."),
                    QString("red"));
            }
            if (_analyzerForm->radioBSearchAreaIsSelected())
            {
                startSearchArea = true;
                corner1 = mouseEvent->localPos().toPoint();
                _analyzerForm->showStatusBarMessage(QString("Save the current MSD-SAR press 'a'.After the Detection press 's' to save msd params."),
                    QString("red"));
            }
        }
        

        }
        void CVWidget::mouseMoveEvent(QMouseEvent *mouseEvent)
        {

        if(form == 'a')
        {
            if(startSelection && _analyzerForm->radioBSelectionBoxIsSelected())
            {
                corner2 = mouseEvent->localPos().toPoint();
                this->repaint();
            }
            if (startRadius && _analyzerForm->radioBRadiusIsSelected())
            {
                corner2 = mouseEvent->localPos().toPoint();
                this->repaint();
            }
            if (startSearchArea && _analyzerForm->radioBSearchAreaIsSelected())
            {
                corner2 = mouseEvent->localPos().toPoint();
                this->repaint();
            }
        }
        else if (form == 't')
        {
            this->setCursor(Qt::CrossCursor);
            QPoint point = QPoint(mouseEvent->localPos().toPoint().x(),mouseEvent->localPos().toPoint().y()+10);
            _trainerForm->showStatusBarMessage(QString("Mouse move (%1,%2)").arg(point.x()).arg(point.y()), "gray");
        }
        

        }
        void CVWidget::mouseReleaseEvent(QMouseEvent * mouseEvent)
        {

        if( form == 'a')
        {
            this->setCursor(Qt::ArrowCursor);
            if(startSelection && _analyzerForm->radioBSelectionBoxIsSelected())
            {
                contr->addSelection(corner1.x(),corner1.y(),
                                   corner2.x(),corner2.y());
                startSelection=false;
            }
            if (startRadius && _analyzerForm->radioBRadiusIsSelected())
            {
                contr->setCurrentMSDPatchRadius(corner1.x(), corner1.y(),
                    corner2.x(), corner2.y());
                startRadius = false;
            }
            if (startSearchArea && _analyzerForm->radioBSearchAreaIsSelected())
            {
                contr->setCurrentMSDSearchArea(corner1.x(), corner1.y(),
                    corner2.x(), corner2.y());
                startSearchArea = false;
            }
        }
        else if(form == 't')
        {
            this->setCursor(Qt::CrossCursor);
            QPoint posWidg = this->pos();
            QPoint point = QPoint(mouseEvent->localPos().toPoint().x()-(posWidg.x()),
                               mouseEvent->localPos().toPoint().y());
            _trainerForm->showStatusBarMessage(QString("Mouse clicked (%1,%2)").arg(point.x()).arg(point.y()), "gray");
            contr->changeLabel2KP(point);
            contr->setCurrentImgToShow(contr->getCurrentImageWithKP());
            showImage(contr->getCurrentImgToShow());
        }
        

        }
        void CVWidget::paintEvent(QPaintEvent * )
        {

        int w = orig_image.width();
        int h = orig_image.height();
        if( w <= 0 || h <= 0)
            return;
        QImage::Format f = orig_image.toImage().format();
        QImage image (w,h,f);
        QPainter painter(&image);
        if(startSelection)
        {
            painter.setPen(QPen(Qt::red, 2));
        }
        else if (startRadius)
        {
            painter.setPen(QPen(Qt::cyan, 2));
        }
        else if (startSearchArea)
        {
            painter.setPen(QPen(Qt::magenta, 2));
        }
        
        QRectF rectangle(corner1,corner2);
        painter.drawPixmap(0,0,orig_image);
        painter.drawRect(rectangle);
        painter.end();
        m_imageLabel->setPixmap(QPixmap::fromImage(image));
        

        }

        The AnalyzerForm is the QWidget opened in a QMainWindow, and on it I have the problem.

        AnalyzerForm::AnalyzerForm(QWidget *parent) :

        QWidget(parent),
        ui(new Ui::AnalyzerForm),
        controller(new ControllerQt()),
        fileSystemModel(new QFileSystemModel())
        

        {

        ui->setupUi(this);
        fileSystemModel->setRootPath(PATH);
        ui->treeViewFileSystem->setModel(fileSystemModel);
        ui->treeViewFileSystem->setRootIndex(fileSystemModel->index(PATH));
        ui->myCVWidget->setAnalyzerForm(this);
        ui->myCVWidget->setController(controller);
        ui->radioBSelectionBox->setChecked(true);
        
        //selection trigger a slot
        QItemSelectionModel * selectionModel = ui->treeViewFileSystem->selectionModel();
        connect(selectionModel, SIGNAL(selectionChanged (const QItemSelection &, const QItemSelection &)),
                 this, SLOT(selectionChangedSlot(const QItemSelection &, const QItemSelection &)));
        

        }

        AnalyzerForm::~AnalyzerForm()
        {

        delete ui;
        delete controller;
        

        }

        void AnalyzerForm::setStatusBar(QStatusBar * statusBar)
        {

        _statusBar = statusBar;
        }

        void AnalyzerForm::showStatusBarMessage(QString message, QString color)
        {

        _statusBar->showMessage(message);
        _statusBar->setStyleSheet(QString("QLabel { background-color : %1; color : black; }")
            .arg(color));
        

        }

        bool AnalyzerForm::radioBRadiusIsSelected()
        {

        return ui->radioBPatchRadius->isChecked();
        }
        bool AnalyzerForm::radioBSearchAreaIsSelected()
        {

        return ui->radioBSearchArea->isChecked();
        }

        bool AnalyzerForm::radioBSelectionBoxIsSelected()
        {

        return ui->radioBSelectionBox->isChecked();
        }

        void AnalyzerForm::on_buttonOpenImg_clicked()
        {

        if(!selectedFile.isEmpty())
        {
            //set current image showed
            controller->openCurrentImage(selectedFile.toStdString());
            QImage imageShowed = controller->getCurrentImage();
            if(imageShowed.isNull())
            {
                QMessageBox::information(this,"Image Viewer","Error Displaying image");
                return;
            }
            ui->myCVWidget->showImage(imageShowed);
            ui->radioBPatchRadius->setEnabled(true);
            ui->radioBSearchArea->setEnabled(true);
        }
        return;
        

        }

        void AnalyzerForm::selectionChangedSlot(const QItemSelection & , const QItemSelection & )
        {

        //get the text of the selected item
        const QModelIndex index = ui->treeViewFileSystem->selectionModel()->currentIndex();
        selectedFile = fileSystemModel->filePath(index);
        return;
        

        }

        void AnalyzerForm::on_buttonSave_clicked()
        {

        controller->saveSelections();
        

        }

        void AnalyzerForm::on_buttonSavePatternParams_clicked()
        {

         QString filename = QFileDialog::getSaveFileName(this->parentWidget(), tr("Save file"), "./"+selectedFile, tr("_pp.yml"));
        filename = filename + "_pp.yml";
        controller->savePatternParams(filename.toStdString());
        

        }

        void AnalyzerForm::on_buttonDetectKpAll_clicked()
        {

        controller->detectAll();
        ui->myCVWidget->showImage(controller->getCurrentImageWithKP());
        showStatusBarMessage(QString("Detected: keyPoints. "), QString("green"));
        

        }

        void AnalyzerForm::on_buttonDetectKpCurrent_clicked()
        {

        controller->detectCurrent();
        ui->myCVWidget->showImage(controller->getCurrentImageWithKP());
        showStatusBarMessage(QString("Detected: keyPoints. Radius %1 SearchArea %2 Th. Saliency AVG %3")
            .arg(controller->getCurrentMsdPatchRadius())
            .arg(controller->getCurrentMsdSearchAreaRadius())
            .arg(controller->getCurrentMsdThSaliency()),
            QString("green"));
        

        }

        void AnalyzerForm::keyPressEvent(QKeyEvent * event)
        {

        if (event->key() == Qt::Key_C)
        {
            ui->radioBPatchRadius->setEnabled(true);
            ui->radioBSearchArea->setEnabled(true);
            controller->setCurrentImgToShow(controller->getCurrentImage());
            ui->myCVWidget->showImage(controller->getCurrentImgToShow());
            showStatusBarMessage(QString("Original Image."), QString("white"));
        }
        if (event->key() == Qt::Key_A && radioBRadiusIsSelected())
        {
            ui->radioBPatchRadius->setEnabled(false);
            controller->setCurrentImgToShow(ui->myCVWidget->getCurrentImageShowed());
            ui->myCVWidget->showImage(controller->getCurrentImgToShow());
            showStatusBarMessage(QString("Current MSD Radius saved."), QString("yellow"));
        }
        if (event->key() == Qt::Key_A && radioBSearchAreaIsSelected())
        {
            ui->radioBSearchArea->setEnabled(false);
            controller->setCurrentImgToShow(ui->myCVWidget->getCurrentImageShowed());
            ui->myCVWidget->showImage(controller->getCurrentImgToShow());
            showStatusBarMessage(QString("Current MSD Search Area saved."), QString("yellow"));
        }
        if (event->key() == Qt::Key_A && radioBSelectionBoxIsSelected())
        {
            controller->setCurrentImgToShow(ui->myCVWidget->getCurrentImageShowed());
            ui->myCVWidget->showImage(controller->getCurrentImgToShow());
            showStatusBarMessage(QString("Selection Box added."), QString("yellow"));
        }
        if (event->key() == Qt::Key_S )
        {
            controller->addMsdParameters(controller->getCurrentMsdPatchRadius(),
                                         controller->getCurrentMsdSearchAreaRadius(),
                                         controller->getCurrentMsdThSaliency());
            showStatusBarMessage(QString("Current MSD Parameters added to list. Press the button to store it."), QString("green"));
        }
        

        }

        I've the problem when I press the button OpenFile ( that call the function void AnalyzerForm::on_buttonOpenImg_clicked()) and then when I press the button Save Pattern Params ( the functions void AnalyzerForm::on_buttonSavePatternParams_clicked() ).
        If I just press the button Save Pattern Params (so without opening any images )I don't have any problem. I think that there is an "interference" beteween the two QWidget.

        Before the my application was structured with a QMainWindow with some buttons that will open a different QWidgets in different Window, for example the main window and then the "Analyzer Form" window, and everything was working.
        Now I have a QMainWindow with a menuBar and with the function setCentralWidget I assign the different Qwidget. Reading the code of the QMainWindow maybe is more explanatory:
        MainWindow::MainWindow(QWidget *parent) :

        QMainWindow(parent),
        ui(new Ui::MainWindow)
        

        {

        ui->setupUi(this);
        //Default start with the AnalyzerForm
        AnalyzerForm * form = new AnalyzerForm(this);
        form->setStatusBar(ui->statusbar);
        setCentralWidget(form);
        setWindowTitle("SVM Classifier Application - Analyzer");
        // adjustSize();
        

        }

        MainWindow::~MainWindow()
        {

        delete ui;
        

        }

        void MainWindow::closeEvent (QCloseEvent *){}

        void MainWindow::on_actionOpen_triggered()
        {

        AnalyzerForm * form = new AnalyzerForm(this);
        form->setStatusBar(ui->statusbar);
        setCentralWidget(form);
        setWindowTitle("SVM Classifier Application - Analyzer Msd Parameters");
        

        // adjustSize();
        }

        void MainWindow::on_actionTrainer_triggered()
        {

        TrainerForm * form = new TrainerForm(this);
        form->setStatusBar(ui->statusbar);
        setCentralWidget(form);
        setWindowTitle("SVM Classifier Application - Trainer");
        

        // adjustSize();
        }

        void MainWindow::on_actionClassifier_triggered()
        {

        ClassifierForm * form = new ClassifierForm(this);
        form->setStatusBar(ui->statusbar);
        setCentralWidget(form);
        setWindowTitle("SVM Classifier Application - Classifier");
        

        // adjustSize();
        }

        void MainWindow::on_actionRoc_Curve_triggered()
        {

        PlotForm * form = new PlotForm(this);
        setCentralWidget(form);
        setWindowTitle("SVM Classifier Application - Curve Roc Analyzer");
        

        }

        Could be this different structure of the Qwidget and QMainWindow an other effect of my problem?

        1 Reply Last reply
        0
        • A Offline
          A Offline
          annettaws
          wrote on last edited by
          #4

          Solved!!
          The problem was the paintEvent on the Qwidget CVWidget always running when I open an image.
          I suppose that it contrast the paintEvent of the QFileDialog with an incorrenct visualitazion.

          1 Reply Last reply
          0

          • Login

          • Login or register to search.
          • First post
            Last post
          0
          • Categories
          • Recent
          • Tags
          • Popular
          • Users
          • Groups
          • Search
          • Get Qt Extensions
          • Unsolved