QWidget modal

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

QWidget modal

Post by Violette »

Bonjour, je vient de commencer a rédiger sur le wiki un tuto pour créer une fenêtre personnalisé avec Qt mais je bloque sur un petit soucis. C'est pas très important mais je veux savoir, pour le principe. Comment rendre un QWidget modal (sans utiliser QDialog ou QMainWindow) ? J'ai tester plusieurs choses et pas moyen... Quand je l'afficher avec show() la fenêtre disparait, et exec n'est pas dispo pour les QWidget.

Il y a bien la propriété modal pourtant mais

Code: Select all

var a = new QWidget();
a.modal = true;

Console.print(a.modal); 
//retourne false...
Arf, et avec QtScript il n'y a pas de méthode pour changer cela, il y a bien setWindowModality mais ça ne donne rien.

Code: Select all

int main(int argc, char *argv[])
{
    QApplication a(argc, argv);

    ScriptWidget script_widget;
    script_widget.show();

    return a.exec();
}
Voici le code en c++. Le problème est que quand j'essaye de créer une instance de l'objet avec new QApplication, j'ai une erreur, surement un pb d'arguments ?

TypeError: QApplication cannot be constructed

Quand j'essaye QCoreApplication, j'ai un message d'erreur comme quoi il manque les arguments mais j'ai beau lire et relire la doc je ne trouve pas le détails des arguments à mettre...

Il y a quelque temps j'avais chercher comment utiliser QtScript avec Qt Creator ce qui a été un énorme échec vu que j'ai rien compris et que j'ai bien l'impression que de base personne utilise QtScript, et que tout le monde osef complet vu que ya putin de 0 doc compréhensible.

Ceci dit j'avais trouvé QtScript Generator (j'ai bien réussi à le compiler mais sans les bindings du coup ça marchais pas forcément, ça a fini par me souler et j'ai laissé tombé) mais ces scripts sont vraiment intéressant et ils fonctionne avec Actionaz héhé... Sauf qu'ils ne restent pas affiché ben vouis videment sinon pas marrant je pourrais pas savoir comment rendre un QWidget modal. Ceci dit il utilise un QWidget tout simple et je présume que lancé avec l'exe généré par le tool il reste affiché... Il utilise QCoreApplication (quand on lit la doc, il est marqué que c'est a utiliser pour une application non graphique, en console, ooooooooooooooooooooooook) Doit bien y avoir une soluce sniff.

Quelqu'un à une idée de la chose ?

Merci, merci et encore merci.

EDIT : Ah et aussi, y a t-il d'afficher des images dans le wiki car ça serai mieux pour le "tuto" sinon c'est pas très important je mettrais quand même les liens des images en dessous de chaque bout de code pour montrer le résultat.
User avatar
Jmgr
Admin
Posts: 1650
Joined: 07 Dec 2005, 15:45
Contact:

Re: QWidget modal

Post by Jmgr »

QWidget n'est pas prévu pour créer des fenêtres modales, mais en C++ setWindowModality fonctionne bien, aucune idée pourquoi ça ne fonctionne pas avec le binding.

Une autre solution :

Code: Select all

var w = new QWidget();
w.setWindowTitle("test");
w.show();

var loop = new QEventLoop();
w.destroyed.connect(loop.quit);
loop.exec();
Mais ça ne fonctionne pas (et a tendance à faire planter le logiciel). Le problème ici c'est que le signal "destroyed" de QWidget n'est jamais appelé. Probablement parce qu'il s'agit d'un objet Javascript qui n'est supprimé que plus tard.

Tu ne peux pas créer de nouvelle QApplication (ou QCoreApplication) : il ne peut y en avoir qu'une seule et il y a déjà celle d'Actiona.
Il y a quelque temps j'avais chercher comment utiliser QtScript avec Qt Creator ce qui a été un énorme échec vu que j'ai rien compris et que j'ai bien l'impression que de base personne utilise QtScript, et que tout le monde osef complet vu que ya putin de 0 doc compréhensible.
C'est vrai, QtScript n'est pas trop utilisé.
Ceci dit j'avais trouvé QtScript Generator (j'ai bien réussi à le compiler mais sans les bindings du coup ça marchais pas forcément, ça a fini par me souler et j'ai laissé tombé) mais ces scripts sont vraiment intéressant et ils fonctionne avec Actionaz héhé... Sauf qu'ils ne restent pas affiché ben vouis videment sinon pas marrant je pourrais pas savoir comment rendre un QWidget modal. Ceci dit il utilise un QWidget tout simple et je présume que lancé avec l'exe généré par le tool il reste affiché... Il utilise QCoreApplication (quand on lit la doc, il est marqué que c'est a utiliser pour une application non graphique, en console, ooooooooooooooooooooooook) Doit bien y avoir une soluce sniff.
Oui, mais non, ces programmes là sont prévus pour êtres exécutés avec un interpréteur fourni avec QtScript Generator.
Cela dit, je me demande comment ça marche : il y a la même limitation qu'avec Actiona : un seul QApplication par programme. Hm.

Enfin bref, il suffit de remplacer QWidget par QMainWindow et puis ça devrait fonctionner.
EDIT : Ah et aussi, y a t-il d'afficher des images dans le wiki car ça serai mieux pour le "tuto" sinon c'est pas très important je mettrais quand même les liens des images en dessous de chaque bout de code pour montrer le résultat.
Oui tu peux uploader des "médias" dans le wiki.
"My software never has bugs. It just develops random features."
Violette
Posts: 119
Joined: 10 Aug 2014, 17:42

Re: QWidget modal

Post by Violette »

Merci =).
Jmgr wrote:QWidget n'est pas prévu pour créer des fenêtres modales, mais en C++ setWindowModality fonctionne bien, aucune idée pourquoi ça ne fonctionne pas avec le binding.

Une autre solution :

Code: Select all

var w = new QWidget();
w.setWindowTitle("test");
w.show();

var loop = new QEventLoop();
w.destroyed.connect(loop.quit);
loop.exec();
Mais ça ne fonctionne pas (et a tendance à faire planter le logiciel). Le problème ici c'est que le signal "destroyed" de QWidget n'est jamais appelé. Probablement parce qu'il s'agit d'un objet Javascript qui n'est supprimé que plus tard.
Ok au final c'est pas plus mal.
Jmgr wrote:Tu ne peux pas créer de nouvelle QApplication (ou QCoreApplication) : il ne peut y en avoir qu'une seule et il y a déjà celle d'Actiona.
Ah d'accord ben je savais pas.
Jmgr wrote:Enfin bref, il suffit de remplacer QWidget par QMainWindow et puis ça devrait fonctionner.
Oui, c'est sur.
Jmgr wrote:Oui tu peux uploader des "médias" dans le wiki.
Sorry, you don't have enough rights to upload files. :p
User avatar
Jmgr
Admin
Posts: 1650
Joined: 07 Dec 2005, 15:45
Contact:

Re: QWidget modal

Post by Jmgr »

Sorry, you don't have enough rights to upload files. :p
Normalement c'est corrigé maintenant.
"My software never has bugs. It just develops random features."
Violette
Posts: 119
Joined: 10 Aug 2014, 17:42

Re: QWidget modal

Post by Violette »

Parfait merci =).
Post Reply