2017-09-28 15 views
0

Je suis très nouveau sur Qt et OpenCV et je suis en train de créer un projet intégrant les deux. Le problème que je rencontre est que j'ai un bouton pour charger un fichier, qui utilise QFileDialog. Le tout fonctionne bien et mon fichier est chargé. Cependant, il se bloque si je clique sur le bouton de chargement une seconde fois. Il semble que le problème se produit lors de l'appel à QFileDialog :: getOpenFileName, mais j'ai besoin d'une opinion d'expert.Qt :: QFileDialog plante mon application lorsqu'elle est appelée une seconde fois

C'est la fonction pour le clic de bouton.

void MainWindow::on_pushButton_clicked() 
{ 
    QFileDialog dialog(this); 
    dialog.setNameFilter(tr("Images (*.png *.xpm *.jpg)")); 
    dialog.setViewMode(QFileDialog::Detail); 
// dialog.setAttribute(Qt::WA_DeleteOnClose); 
// dialog.DontUseNativeDialog; 

    filename = QFileDialog::getOpenFileName(this, tr("Open File"), 
               "/home", 
               tr("Images (*.png *.xpm *.jpg)")); 
    imageObject = new QImage(); 
    imageObject->load(filename); 
    image = QPixmap::fromImage(*imageObject); 
    scene = new QGraphicsScene(this); 
    scene->addPixmap(image); 
    scene->setSceneRect(image.rect()); 

    ui->graphicsView->setScene(scene); 
    ui->graphicsView->fitInView(scene->sceneRect(),Qt::KeepAspectRatio); 

    cvHandler = new OpenCVHandler(filename.toStdString()); 
} 

J'ai déjà essayé les deux lignes qui sont commentées. Ma recherche a également tourné rien que je puisse comprendre facilement:

Crash when calling getOpenFileName from QItemDelegate's custom editor

QFileDialog opens a second (possibly parent) unwanted window

Qt File Dialog Rendered Incorrectly and Crashes

Si tout concerné, je suis sur un système Ubuntu LTS 16.04.

Merci

+0

Je ne connais pas la fonction 'QFileDialog :: getOpenFileName' mais il semble que vous travaillez avec des fichiers. Dans ce cas, vous devez être conscient qu'un fichier ne peut être ouvert qu'une seule fois, et si un programme essaie de l'ouvrir une autre fois, une erreur se produit. Donc, si vous voulez accéder à un fichier, vous devez d'abord vous assurer qu'aucun autre programme ne l'utilise/vous devez vous assurer que le fichier est correctement fermé lorsqu'il n'est plus nécessaire. – Lehue

+0

Est-ce qu'il se bloque si vous commentez tout le code dans cette fonction après avoir obtenu le nom de fichier? Commentez chaque ligne dans 'MainWindow :: on_pushButton_clicked()' après 'QFileDialog :: getOpenFileName'. Je pense que le bug est dans un endroit différent de ce que vous attendez. – drescherjm

+0

@drescherjim Il se bloque toujours la deuxième fois. La fenêtre se fige et je dois forcer à quitter. – Sami

Répondre

0

Le problème était dans les lignes commentées. Je n'ai pas utilisé dialog.DontUseNativeDialog correctement. L'utiliser dans la fonction getOpenFileName a fait l'affaire:

filename = QFileDialog::getOpenFileName(this, tr("Open File"), 
               "/home", 
               tr("Images (*.png *.xpm *.jpg)"),0,QFileDialog::DontUseNativeDialog); 

Merci à tous.

+0

Je voudrais me débarrasser de 'dialogue' puisque vous ne l'utilisez pas du tout. Le static 'QFileDialog :: getOpenFileName()' n'utilise pas votre boîte de dialogue. – drescherjm