Focus QDialog.show()

Vous voulez de l'aide ? Postez ici :)
Post Reply
Violette
Posts: 119
Joined: 10 Aug 2014, 17:42

Focus QDialog.show()

Post by Violette »

Sujet du soir, bonsoir... A croire que ce forum est devenu la plateforme de support la plus active concernant QtScript trololol... :X

Si je me réfère à la doc, lorsqu'un nouveau QWidget ou un QDialog non modal, ou un autre truc hérité de QWidget mais osef est appelé avec .show() il est sensé prendre le focus, ceci est peut être une bêtise vu que je ne retrouve plus l'endroit où je pense avoir lu ça... Ceci dit c'est pas le soucis, le soucis est que ceci :

Code: Select all

var a = new QDialog();
var b = new QPushButton("parent", a);

var c = new QDialog(a);
var d = new QPushButton("enfant", c);

c.show();

Console.print(c.focus); //return false, soit

c.setFocus(true);

Console.print(c.focus); //return true, cool

a.exec();


Mais, bien sur si il y a pas de mais c'est pas drôle, c ne prend pas le focus héhé. Il reste sur a.

De plus,

Code: Select all

var a = new QDialog();
var b = new QPushButton("parent", a);

var c = new QDialog(a);
var d = new QPushButton("enfant", c);

var e = new QDialog(a);
var f = new QPushButton("enfant2", e);


c.show();
e.show();

c.raise(); //c apparait bien en haut de la pile, ça marche
c.activateWindow(); //le focus reste sur a
OU
d.activateWindow(); //ça ne change rien

a.exec();
La doc dit :
Doc en mousse wrote:Définit le widget de haut niveau contenant ce widget en tant que fenêtre active.
Une fenêtre active est une fenêtre de haut niveau visible qui détient le focus d'entrée du clavier.
Du coup est ce que c'est possible de donner le focus à une fenêtre non modal avec QtScript ? Car en C++ pas de soucis a priori, les 2 solutions fonctionnent très bien.

Merci d'avance et désolé d'utiliser le forum d'Actiona pour quasi uniquement des demandes d'aides centrées sur Qt mais quand je vois sur le forum officiel de Qt qu'en 1 mois, il y a eu 4 sujets d'ouverts et 0 pour QtScript, sniff...
User avatar
Jmgr
Admin
Posts: 1650
Joined: 07 Dec 2005, 15:45
Contact:

Re: Focus QDialog.show()

Post by Jmgr »

Mais, bien sur si il y a pas de mais c'est pas drôle, c ne prend pas le focus héhé. Il reste sur a.
Là je ne vois rien d'étonnant : exec() a la priorité sur le focus. Et je pense qu'il ne peut y avoir qu'un seul QDialog ayant le focus.
Du coup est ce que c'est possible de donner le focus à une fenêtre non modal avec QtScript ? Car en C++ pas de soucis a priori, les 2 solutions fonctionnent très bien.
Je ne vois pas pourquoi ça ne serait pas le cas.

Un des problèmes ici c'est qu'il ne peut y avoir qu'une seule fenêtre modale à la fois, si la dialog est application modal. Selon la doc :
If the dialog is application modal, users cannot interact with any other window in the same application until they close the dialog. If the dialog is window modal, only interaction with the parent window is blocked while the dialog is open. By default, the dialog is application modal.
Par contre si la dialog est window modal, alors seule la fenêtre parente est bloquée.

Je ne vois pas trop ce que tu cherches à obtenir, peux-tu me donner quelques détails en plus ?
"My software never has bugs. It just develops random features."
Violette
Posts: 119
Joined: 10 Aug 2014, 17:42

Re: Focus QDialog.show()

Post by Violette »

Salut, ben, en fait j'aurais besoin que

Code: Select all

var a = new QDialog();
var b = new QPushButton("Parent", a);

var c = new QDialog(a);
var d = new QPushButton("Enfant 1", c);

var e = new QDialog(a);
var f = new QPushButton("Enfant 2", e);

c.show();
e.show();

a.exec();
e, qui est donc la fenêtre qui apparait au premier plan, prenne le focus, pour qu'elle puisse être fermé rapidement simplement en appuyant sur Echap, or le focus reste sur a, donc si j'appuie sur Echap, ça ferme les 3 QDialog. Quand on affiche un nouveau QDialog avec show() grâce au signal clicked sur un bouton, le new QDialog prend bien le focus. Mais dans ce cas ci, non. Autant je trouve ça logique que si on affiche les 3 de cette manière, a garde le focus grâce à exec(), mais je ne comprend pas trop pourquoi setFocus ou raise et activateWindow ne fonctionne pas :S
Post Reply