Question

Je ne sais pas vraiment comment formuler ma question cette fois ...

J'ai mon application avec un QDialog comme fenêtre principale. L'application obtient différentes valeurs comme la température, l'humidité, etc. à partir d'une machine distante.

Pour le développement, j'ai ajouté une boîte de groupe avec différents widgets pour simuler ces valeurs. J'ai des limites différentes pour lancer des avertissements et des alarmes à l'utilisateur.

Par exemple, si la température augmente sur 30 ° C, j'ouvre une boîte QMessage avec le temps de demande (l'application fait du sondage à la machine distante) et la température actuelle. Ceci est donc mis à jour chaque cycle de demande.

J'utilise la méthode show () pour afficher la zone de message qui maintient mon application en marche en arrière-plan. Le problème est maintenant: l'accent est mis sur la zone de message et rien dans ma fenêtre principale / QDialog ne peut être cliqué jusqu'à ce que la zone de message ne soit pas acceptée / n'a terminé.

Et c'est mon problème: en mode simulation, je veux jouer avec différentes valeurs de température que je peux ajuster par curseur dans la fenêtre principale. Comment puis-je accéder à ces widgets / faire la boîte de message en quelque sorte "ne pas bloquer"?

Meilleures salutations,

Matthias

Était-ce utile?

La solution

Ce que vous vivez s'appelle la «modalité» d'une fenêtre. Par défaut, un QMessageBox est "Application Modal". Cela signifie que l'entrée sur toutes les autres fenêtres d'application est bloquée.

Pour changer la modalité, utilisez setWindowModality () avec une valeur de QT :: WindowModality Juste avant d'appeler show(). Dans ton cas:

box->setWindowModality(Qt::NonModal);
box->show();

Autres conseils

En effet, vous avez une boîte de message modale qui est la façon dont QMessageBox est destiné à fonctionner - c'est-à-dire que l'utilisateur doit être alerté et que l'interface utilisateur est protégée contre l'interaction supplémentaire jusqu'à ce que l'utilisateur ait enregistré le message, a fermé la boîte de message et (si nécessaire) prise Toute action requise en réponse au message.

Maintenant, si vous définissez la modalité de la boîte de message sur QT :: Nonmodal, (n'oubliez pas de l'attribuer à une variable qui ne sortira pas de portée lorsque votre application continue après avoir fait apparaître la boîte de message), vous pourrez interagir avec l'interface utilisateur Même si la boîte de message s'affiche., ce que je dois dire est «inhabituelle». Si je comprends votre exigence, vous aurez déjà la boîte de message - alors bien que cela soit encore en place, vous voudrez alors jouer avec différentes valeurs temporaires dans la fenêtre principale - à quel effet? Jusqu'à ce qu'une autre boîte de dialogue de message soit produite? La boîte de message devra être rejetée à un moment donné.

Non seulement cela, mais si vous affichez une boîte de message non modale, puis interagissez avec la fenêtre principale, vous avez probablement simplement disparu la boîte de message derrière la fenêtre principale, hors de vue de toute façon.

Je suggère que les boîtes de messages sont généralement traitées comme prévues - des boîtes d'alerte modales temporaires transitoires uniquement et que vous avez peut-être besoin d'une zone de rapport / d'état en direct clairement visible dans votre fenêtre principale plutôt que d'utiliser une boîte QMessage non modale.

J'espère que cela t'aides

Salutations

Roger

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top