J'utilise actuellement QFileDialog::getOpenFileName. Cependant, comme suggéré dans this article, cela se bloque lorsque l'application principale se ferme alors que la boîte de dialogue est ouverte. Vous pouvez voir un exemple de la façon de reproduire le plantage ici:Exécutez QFileDialog :: getOpenFileName sans boucle d'événement distincte?
int main(int argc, char **argv) {
QApplication application{argc, argv};
QMainWindow *main_window = new QMainWindow();
main_window->show();
QPushButton *button = new QPushButton("Press me");
main_window->setCentralWidget(button);
QObject::connect(button, &QPushButton::clicked, [main_window]() {
QTimer::singleShot(2000, [main_window]() { delete main_window; });
QFileDialog::getOpenFileName(main_window, "Close me fast or I will crash!");
});
application.exec();
return 0;
}
Je peux utiliser QFileDialog
avec le constructeur normal au lieu, comme décrit here. Cependant, alors je ne semble pas obtenir le dialogue ouvert de fenêtres de fichier natif.
Existe-t-il un moyen d'obtenir un programme qui ne plante pas et d'utiliser la boîte de dialogue d'ouverture de fichier Windows native via Qt?
Pourquoi la principale proche de l'application lorsque la boîte de dialogue est ouverte? Tu ne peux pas empêcher ça? – drescherjm
Non, un thread distinct peut potentiellement générer une erreur. Dans ce cas, l'application est fermée et tous les widgets sont détruits. Cela fonctionne bien (tous les destructeurs appropriés sont appelés), à l'exception d'un getOpenFileName encore en cours d'exécution. –
Avez-vous affecté un parent? - peut aussi poster votre code pour appeler le dialogue en cas il y a quelque chose d'évident –