IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Discussion :

Ouvrir la commande "system" dans une sous-fenêtre

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Futur Membre du Club
    Homme Profil pro
    Inscrit en
    Février 2012
    Messages
    3
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Février 2012
    Messages : 3
    Par défaut Ouvrir la commande "system" dans une sous-fenêtre
    Bonjour !
    Excusez moi de vous déranger, j'avais juste une petite question de Qt.

    Est-ce que vous savez comment ouvrir un document Excel, Word… dans une sous-Fenêtre ?

    Il est possible de créer une grande fenêtre contenant des sous-fenêtre grâce à QMdi en donnant à la classe la propriété de QMainWindow.

    En outre il est possible d’ouvrir excel, gnuplot… par la commande : system ("test.xls").
    Ces deux trucs fonctionnent très bien indépendamment l’un de l’autre..

    Mais je ne sais pas ouvrir l’un de ces fichiers dans une sous-fenêtre.
    J’ai essayé :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    QMdiSubWindow *sousFenetre6 = zoneCentrale->addSubWindow(system ("test.xls"));
    sousFenetre6->move(50,300);
    sousFenetre6->setFixedSize(200,200);
    ou alors j’ai essayé de déclarer une QWidget (page1) et de mettre la commande dedans comme ce que je fais habituellement pour des boutons, textes… :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
        page1 = new QWidget;
        page1 = system ("test.xls");  //(je sais pas si ce genre de truc fonctionne…)
    QMdiSubWindow *sousFenetre6 = zoneCentrale->addSubWindow(page1);
    sousFenetre6->move(50,300);
    sousFenetre6->setFixedSize(200,200);
    sauf que ça ne marche pas…



    Sinon il paraît que ça peut peut-être marcher avec Qprocess : mais le problème reste le même pour l'ouvrir dans une sous-fenêtre.

    Savez-vous comment faire ?
    Merci beaucoup

  2. #2
    Membre éprouvé
    Avatar de ymoreau
    Homme Profil pro
    Ingénieur étude et développement
    Inscrit en
    Septembre 2005
    Messages
    1 154
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Ingénieur étude et développement
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2005
    Messages : 1 154
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    page1 = new QWidget;
    page1 = system ("test.xls");  //(je sais pas si ce genre de truc fonctionne…)
    Ici tu fais une nouvelle affectation sur la variable page1 donc tu perds le lien du widget que tu viens de créer, et puis c'est aussi faux pour le type puisque la 1ère ligne renvoie un QWidget* et l'autre un int (fonction system). En C++ une variable est typée, tu ne peux pas affecter deux choses différentes (enfin là si mais ça plantera ^^). Tout ça c'est juste du C++, Qt ou pas c'est pareil.

    Pour ta question, ça n'est pas possible à ma connaissance. QMdiArea sert à faire des sous-fenêtre, mais que au format Qt, qui font partie de ton application. Je ne crois pas qu'on puisse ouvrir dans Qt l'interface d'une autre application, c'est dans tous les cas un autre processus et il est indépendant de celui qui gère ta mainwindow.

    Tu peux soit lancer l'ouverture d'un fichier par le système d'exploitation avec cette fonction ; soit l'ouvrir toi même avec QProcess et "garder la main" sur le processus (récupérer sa sortie, lui passer des arguments etc), ce qui à mon avis n'a pas beaucoup d'intérêt si tu lances une application graphique comme Excel.

  3. #3
    Responsable Systèmes


    Homme Profil pro
    Gestion de parcs informatique
    Inscrit en
    Août 2011
    Messages
    18 328
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Gestion de parcs informatique
    Secteur : High Tech - Matériel informatique

    Informations forums :
    Inscription : Août 2011
    Messages : 18 328
    Par défaut commande system
    A mon avis system("test.xls"); ne fonctionne pas

    Par contre system("c:\\Program files\\Microsoft office\\office11\\excel.exe test.xls"); devrait fonctionner

    Il faut bien sûr adapter le chemin à la version d'office
    Ma page sur developpez.com : http://chrtophe.developpez.com/ (avec mes articles)
    Mon article sur le P2V, mon article sur le cloud
    Consultez nos FAQ : Windows, Linux, Virtualisation

  4. #4
    Futur Membre du Club
    Homme Profil pro
    Inscrit en
    Février 2012
    Messages
    3
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Février 2012
    Messages : 3
    Par défaut
    ok
    merci beaucoup tous les deux !!!
    je vais étudier vos solutions...

  5. #5
    Responsable Systèmes


    Homme Profil pro
    Gestion de parcs informatique
    Inscrit en
    Août 2011
    Messages
    18 328
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Gestion de parcs informatique
    Secteur : High Tech - Matériel informatique

    Informations forums :
    Inscription : Août 2011
    Messages : 18 328
    Par défaut complement system
    system() n'a rien à voir avec qt, donc je ne pense pas que la commande executée puisse être placée dans une fenêtre qt cela s'ouvrira dans une fenetre gérée par le système. en cas d'arrêt de ton appli, je ne sais pas si excel sera fermé, théoriquement si system() crée un processus enfant , la destruction du processus père devrait y metre fin, mais cela est un auter sujet.
    Tu peux sinon jouer avec cmd.exe qui lancerait excel et se fermerait.

    C'est de la ruse et pas très catholique mais ça devrait marcher.
    Ma page sur developpez.com : http://chrtophe.developpez.com/ (avec mes articles)
    Mon article sur le P2V, mon article sur le cloud
    Consultez nos FAQ : Windows, Linux, Virtualisation

  6. #6
    Membre éprouvé
    Avatar de ymoreau
    Homme Profil pro
    Ingénieur étude et développement
    Inscrit en
    Septembre 2005
    Messages
    1 154
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Ingénieur étude et développement
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2005
    Messages : 1 154
    Par défaut
    A moins de vouloir un code indépendant de Qt, QProcess fait la même chose que system, façon POO, avec des fonctionnalités en plus, c'est à préférer donc. Sinon comme je le disais si c'est simplement pour ouvrir un document, QDesktopServices fait gérer tout ça par l'OS, pas besoin de connaitre l'emplacement de excel.exe, l'appli Qt fonctionnera sous tous les OS supportés sans modifier le code, et le process sera géré par l'OS donc totalement indépendant du cycle de vie de ton appli.

Discussions similaires

  1. Gestion d'annulation des actions effectuées dans une sous-fenêtre
    Par randriano dans le forum Entity Framework
    Réponses: 13
    Dernier message: 04/04/2011, 15h57
  2. [Débutant][HTML]Ouvrir le résultat d'un formulaire dans une nouvelle fenêtre
    Par virgul dans le forum Balisage (X)HTML et validation W3C
    Réponses: 3
    Dernier message: 13/09/2006, 12h26
  3. [débutant]composantes dans une sous-fenêtre
    Par ulyssed dans le forum Interfaces Graphiques en Java
    Réponses: 6
    Dernier message: 01/03/2005, 09h03

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo