Bienvenue sur le forum !

Si vous souhaitez rejoindre la communauté, cliquez sur l'un de ces boutons !

Qt 5 : 5.8.0 - Qt Creator : 4.3.0 - Qt Installer : 2.0.3 - JOM : 1.1.2 - Qt Build suite : 1.7.0 - VS Qt 5 : 2.0.0

[Qt4] Changement de style de QLCDNumber

Bonjour, je voudrais grace a des bouton changer le style d'affichage de mon objet QLCDNumber. Mais aparement la connection ne fonctione pas(elle fonctione pour dautre fonction, comme setHexMode())
Voici le code :
connect(outs, SIGNAL(clicked()), lcd, SLOT(setSegmentStyle(QLCDNumber::Outline)));
Je me suit don dit, c'est surement que seul les fonctions void fonctione.
Alors j'ai créer un MyQLCDNumber :
class MyQLCDNumber : public QLCDNumber
{
public :
MyQLCDNumber(unsigned int numDigits, QWidget *parent = 0);
MyQLCDNumber(QWidget *parent = 0);
void setOutlineStyle();
void setFilledStyle();
void setFlatStyle();
};
MyQLCDNumber::MyQLCDNumber(unsigned int numDigits, QWidget *parent)
:QLCDNumber(numDigits, parent)
{}
MyQLCDNumber::MyQLCDNumber(QWidget *parent)
:QLCDNumber(parent)
{}
void MyQLCDNumber::setOutlineStyle()
{
setSegmentStyle(QLCDNumber::Outline);
}
void MyQLCDNumber::setFilledStyle()
{
setSegmentStyle(QLCDNumber::Filled);
}
void MyQLCDNumber::setFlatStyle()
{
setSegmentStyle(QLCDNumber::Flat);
}
Mais la encore, la onnection ne marche pas. Pourtant que j'utilise les fonctions de changement de mode (que se soit avec MyQLCD ou QLCD) dans mon programme, en "dure", sa fonctione. C'est vraiment étrenge. J'aimerais avoir votre avis.

Réponses

  • setSegmentStyle n'etant pas un slot, c'est plutot normal que ton code ne marche pas. Ca n'a donc rien a voir avec des "fonctions void" ou pas.

    On ne peut connecter que des SIGNAL a des SLOT (ou eventuellement a des SIGNAL). Mais la tu connectes des SIGNAL avec des methodes.
    Il te faut donc transformer tes methodes en SLOTS et ca ira beaucoup mieux.

    De plus tu ne peux pas passer dans le slot un parametre, dans le connect tu dois simplement ecrire la signature de ton slot et pas autre chose.
  • Et comment définis ton un slot? Il faut changer le type de retour, ou c'est autre chose(Dans le style des foncteurs?)
  • Hum, j'ai chercher sur la doc de QT et aparement il faut que je mête public slots :
    Mais sa ne fonctione toujours pas...(Pas le moindre effet)
    Fau il que je change quelque chose a mes fonctions?
  • Peux tu mettre le code de la definition de ta classe ?
    As tu cree le moc associe ?
    T'es tu penche sur l'excellent bouquin "Debuter avec Qt3" ?
  • -C'es fait
    -Non
    -Non, je lit la doc http://doc.trolltech.com/4.1/index.php
    En fait c'est bon, il me manquai la macro et le moc. Mais j'aimerais savoir, vaut'il mieu faire un fichier indépendent moc_filename.cpp, ou copier/coller le moc générer dans mon fichier .cpp ? Et y a t'il un moyen d'automatiser sa(par exemple avec un .bat) dans Code::Block ?
  • A chaque fois que tu vas modifier le fichier d'entete (*.h), il te faudra regenerer le moc, donc il vaut mieux le laisser dans un fichier a part.
  • Ok. Et si je veut l'ajouter comme composant, je doit mêtre le moc?
    Sinon ya pas un endroit dans code block ou on peut entrer des lignes de comande? Pour qu'il créer automatiquement un moc et l'ajoute au projet.
  • J'utilise ni ne connais codeBlock alors je serais bien embette pour te repondre, mais sache que le moc contient le code qui va bien pour gerer les connections entre les slots et les signals. Donc le code present dans le moc est du code a part entiere de ton application.
  • Je sais(j'ai bien vu le contenu des fichier .cpp génèrer), mais esque le code générer par le moc doit être ajouter avec le code que j'ai ecrit, quand je fait un composant? Je veut dire, QT, eux ils on mit le code des slots etc avec, c'est bien sa?
  • Je comprend pas bien ta question mais j'espere que j'y repond quand meme :
    toto.h
    toto.cpp
    moc_toto.cpp
    vont tous les 3 ensembles au moment de la compil/linking.
  • Y a un moyen plutot simple d'automatiser la création des moc avec les commandes suivantes :
    qmake -project -> crée un fichier .pro contenant les infos nécéssaires à la création d'un makefile
    qmake -> génère le makefile
    make (ou équivalent) -> compile le tout avec les moc et tout
    La création des moc se fait à je sais plus quelle étape (surement qmake) de ces trois là, mais du moment que tu as mit la macro Q_OBJECT dans les .h concernés ça marchera.
  • Donc en fait il faut que je change l'exe qui construit le makefile, dans code::block?
    Sinon, ce que je demende, c'est quand un créer un composant, et que ensuite on veut l'ajouter dans QT Designer, il faut mêtre le moc?
    En fait je ne sais pas exacement comment fonctione QT designer. Je n'ai même pas trouver comment génèrer le code C++ a partir des formulaires modéliser ^^
Connectez-vous ou Inscrivez-vous pour répondre.