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

Qt Discussion :

SetProgressValue() sous Qt


Sujet :

Qt

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éclairé
    Avatar de alpha_one_x86
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Décembre 2006
    Messages
    411
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Somme (Picardie)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Décembre 2006
    Messages : 411
    Par défaut SetProgressValue() sous Qt
    Bonjour,
    J'aimerai definir une progression de la fenetre courante dans la bare des taches pour vista et seven, hors je ne comprends pas bien comment faire. Je veux le faire pour une application Qt.
    Merci d'avance de votre aide.

  2. #2
    Expert confirmé

    Homme Profil pro
    pdg
    Inscrit en
    Juin 2003
    Messages
    5 756
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : pdg

    Informations forums :
    Inscription : Juin 2003
    Messages : 5 756
    Billets dans le blog
    3
    Par défaut
    Je ne crois pas que Qt gère cela, en tous cas ce n'est pas via QProgressBar. Il te faut passer par de la programmation COM et Win32 (ITaskbarList3::SetProgressValue). Un exemple ici :
    http://www.codeproject.com/KB/vista/...barStatus.aspx
    Mais si tu débutes, ça risque d'être dur...

  3. #3
    Membre éclairé
    Avatar de alpha_one_x86
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Décembre 2006
    Messages
    411
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Somme (Picardie)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Décembre 2006
    Messages : 411
    Par défaut
    Je suis un gros débutant en api win32...

  4. #4
    yan
    yan est déconnecté
    Rédacteur
    Avatar de yan
    Homme Profil pro
    Ingénieur expert
    Inscrit en
    Mars 2004
    Messages
    10 035
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : Ingénieur expert
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Mars 2004
    Messages : 10 035
    Par défaut
    Tu doit surement pouvoir le faire toi même en modifiant l'icône régulièrement :
    http://qt.developpez.com/faq/?page=a...cone-animation

  5. #5
    Membre éclairé
    Avatar de alpha_one_x86
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Décembre 2006
    Messages
    411
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Somme (Picardie)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Décembre 2006
    Messages : 411
    Par défaut
    Je ne veux pas animer une icone, met bien faire une progression dans la barre de tache de windows.

  6. #6
    yan
    yan est déconnecté
    Rédacteur
    Avatar de yan
    Homme Profil pro
    Ingénieur expert
    Inscrit en
    Mars 2004
    Messages
    10 035
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : Ingénieur expert
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Mars 2004
    Messages : 10 035
    Par défaut
    Citation Envoyé par alpha_one_x86 Voir le message
    Je ne veux pas animer une icone, met bien faire une progression dans la barre de tache de windows.
    Ben cela reviens au même.

  7. #7
    Expert confirmé

    Homme Profil pro
    pdg
    Inscrit en
    Juin 2003
    Messages
    5 756
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : pdg

    Informations forums :
    Inscription : Juin 2003
    Messages : 5 756
    Billets dans le blog
    3
    Par défaut
    Citation Envoyé par alpha_one_x86 Voir le message
    Je suis un gros débutant en api win32...
    En fait, c'est de la programmation COM. C'est quelque chose qui devient vite très complexe, mais dans ce cas précis, ça peut encore aller.

    Tu dois instancier la classe ITaskbarList3, qui est en quelque sorte une classe de Windows (du Shell Explorer plus exactement). Pour cela, on utilise un identifiant unique, ainsi qu'une description de l'interface attendue. Tout cela se trouve dans le dernier Windows SDK (Win 7).

    Pour savoir si le SDK que tu as est à jour, ouvre le fichier "shobjidl.h" et regarde si tu y trouves le texte "ITaskbarList3". Si tu ne trouves que le texte "ITaskbarList" ou "ITaskbarList2", c'est pas bon, tu dois mettres à jour :
    http://msdn.microsoft.com/en-us/windows/bb980924.aspx

    Tu dois ensuite configurer VC++ pour qu'il utilise bien ce SDK et pas ton ancien qui est déjà installé. Un lien pour t'aider :
    http://arb.developpez.com/vc++/expre...#Linstall-psdk

    Ensuite, tu peux partir d'un code C++ existant autour de ITaskbarList et le modifier. Par exemple, je tombe là dessus :
    http://social.msdn.microsoft.com/For...b-e0c2540064d6

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    CoInitialize(NULL);
     
    ITaskbarList2* pITask = NULL;
     
    HRESULT hr = CoCreateInstance(CLSID_TaskbarList,NULL,CLSCTX_INPROC_SERVER,IID_ITaskbarList2,(LPVOID*) &pITask);
     
    hr = pITask->HrInit();
     
    hr = pITask->DeleteTab(hwnd);
     
    pITask->Release();
     
    CoUninitialize();
    Tu dois le modifier pour utiliser ITaskbarList3 au lieu de ITaskbarList2. Je vais découper ce code en 2 parties pour que tu comprennes mieux ce qui se passe :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
     
    ITaskbarList3* pITask = NULL;
     
    bool init()
    {
        CoInitialize(NULL);
     
        HRESULT hr = CoCreateInstance(CLSID_TaskbarList,NULL,CLSCTX_INPROC_SERVER,IID_ITaskbarList3,(LPVOID*) &pITask);
        if (FAILED(hr))
        {
             CoUninitialize();
             return false;
        }
        pITask->HrInit();
        return true;
    }
     
    void cleanup()
    {
        pITask->Release();
        pITask = NULL;
        CoUninitialize();
    }
    A priori, si tu es sous Seven, init() devrait réussir (non testé). Si ça échoue, c'est que soit le code est buggé soit que tu n'es pas sous un OS qui supporte cette barre de progression (Vista/XP).

    Une fois que ça a réussi, tu peux utiliser pITask comme un pointeur vers une classe normale. Son interface est documentée ici :
    http://msdn.microsoft.com/en-us/libr...92(VS.85).aspx

    Les fonctions vont te demander un HWND, qui est le handle de ta fenêtre Qt principale (QMainWindow). Tu peux l'obtenir avec winId(). Ca devrait donner :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    void test()
    {
        if (!init()) return;
     
        HWND hMainWnd = QApplication::activeWindow()->winId(); // à ajuster avec ta QMainWindow
     
        for (int i = 0; i < 100; i++)
        {
            pITask->SetProgressValue(hMainWnd, i, 100);
            Sleep(50); // pause de 50ms POUR l'EXEMPLE seulement
        }
     
        pITask->SetProgressState(hwnd, TBPF_NOPROGRESS);
     
        cleanup();
    }

Discussions similaires

  1. Problème d'installation oracle 8.1.7 sous NT
    Par Anonymous dans le forum Installation
    Réponses: 7
    Dernier message: 02/08/2002, 14h18
  2. webcam : lire sur un port usb en c/c++ ou java. sous win. ?
    Par flo007 dans le forum Choisir un environnement de développement
    Réponses: 2
    Dernier message: 24/05/2002, 23h24
  3. OmniORB : code sous Windows et Linux
    Par debug dans le forum CORBA
    Réponses: 2
    Dernier message: 30/04/2002, 17h45
  4. Je ne peux établir une connexion cliente sous Linux.
    Par Anonymous dans le forum CORBA
    Réponses: 5
    Dernier message: 16/04/2002, 15h57
  5. Réponses: 4
    Dernier message: 27/03/2002, 11h03

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