C ++, Qt, OpenGL, CUDA.

C ++, Qt, OpenGL, CUDA.

Outils d’utilisateurs.

Outils du Site.

Table des matieres.

Les segnaux et slots dans Qt 5.

Les segnaux-slots dans Qt 4.

Loftesignalene er de mest spesifikke entre deux fonctions av deux-klassene som er avhengige av de fakultetene som er nevnt ovenfor, og du har en fonksjon for det forste objektet. appelee. La premiere fonction s «appelle» signal «, la sekonde» slot «, le lien entre les deux s» appelle une «connexion».

Oppgi type d, velg, bruk og bruk de klassene og de fonksjonene du vil ha, selv om de ikke er avhengige. Et nokkelen er knyttet til forbindelsen B og B og et passord for forbindelsen A. Pa parle dans cette situasjon de «couplage faible». Nous allons voir maintenant kommentar cela s bruke dansen Qt, mais sachez qu er mulig a bruke dersom du bruker en metode for autentiske biblioteker (for eksempel en brukbar Boost.Signals) utilisant des objet-fonctions komme argument (quelques mots-cles: std :: funksjon, functor objekt, lambda funksjon, etc).

Le systeme de signaux et slots de Qt er relativement enkelt: lorsqu er et signal som er et problem med a sende ut, sa er det ikke mulig a koble til signalene. Une connexion est creee en utilisant la fonction QObject :: Koble til, og skriv ut folgende:

Det er mulig a koble til pluggene til et enkelt spor, uavhengig av signalene, og du vil ikke fa et signal.

La korrespondanse entre les arguments des signnaux et slots er verifieee comme une chaine de caracteres, lors de l’execution. Ainsi, si vous connectez un signal (float) avec une slot (dobbel), la connexion sera refusee puisque les arguments ne korrespondent pas, malgre le fait qu’r un float peut etre converti en double prob probeme.

Les klasser de Qt fournissent de nombreux signaux et slots par defaut (la lista av signaler og slots av klasser er angitt for dokumentasjon av Qt). Vous pouvez egalement creer vos propres signaux et slots dans dans les les les les sorts:

Concretement, une classe doit ressembler a quelque valgte comme cela:

Komme le principe er den pouvoir-forbindelsen og importere quelle classe og importere quels signaux et slots (hvis du er en del av parametrene som de fonksjoner svarer til), er du sikker pa at du er i kontakt med klasser, eller ikke propres klasser du er interessert i klasser entre elles.

Remarque importante: Det er obligatorisk a avklare de klasser som er de som ikke er dansere, og ikke en danser. F.eks. Er det en del av en kompilator som ikke har noe a gjore med fonctionner.

Les segnaux et slots dans Qt 5.

Dans Qt 4, er det mulig at de tilkoblede unike lesfonksjonene er oppgitt og er slatt pa en klasseklasse, og du kan spesifisere deg for a lese noen eksempler. De pluss at du bruker deklarasjoner av fonksjoner for leser, SIGNAL og SLOT-korrespondentkrevende, kan du bruke denne typen til a bruke / bruke, nar du leser om konverteringer som impliserer typene. Hent terminer, la connexion etant cree lors de l’execuution, det er ikke mulig a oppdatere disse sammenstillingene, og at de ikke er kompatible, og det er ikke nodvendig a diagnostisere problemene.

Qt 5 leve ces restriksjoner, men utnytte de pointeurs de fonctions, ce ce permet un verification a la compilation. De pluss at det er mulig a koble til direktoren til poengene til de fonksjoner du bruker av fonctions lambdas.

Kobler des pointeurs de fonctions membres.

Utnyttelse av makroer SIGNAL et SLOT gir deg mulighet til a opprette forbindelse. La verification de la compatibilite des parametres entre le signal et le ples est fa ce ce ce ce ce ce ce ce ce ce ce probleme de testabilite).

Avec Qt 5, une nouvelle syntaxe permet de creer des connexions a la compilation, ce cei permerifier la compatibilite des parametres a la compilation et de gagner en performances.

Hell rappel, la syntaxe pour obtenir un pointeur sur une fonction membre s’ecrit:

For eksempel, velg fonction show de la classe QWidget:

Fonction non surchargee.

Une fonction n er forst og fremst overfort med en eller annen versjon av denne versjonen:

La syntaxe pour connecter une action a un widget devient donc:

Les klasser som er et eksempel pa a gjore det vanskeligere a bruke QObject, men det er ikke bare noen av de deklarerte lesfunksjonene som brukes til a skille mellom klientene. (La makro Q_OBJECT er ikke nodvendigvis uunnv rlig, men du kan lese mer om lesematen og les mer om QMetaObject).

L & # 039; avantage de cette ecriture est que la compatibilite des parametres er effektuee lors de la compilation et une conversion implicit est realisee si necessaire. Ainsi, det er mulig a koble til signal mon_signal (float) vers un slot mon_slot (float), mais egalement vers un slot mon_slot (double).

Fonksjoner surchargees.

Des fonctions er ikke lenger tilgjengelige, og er tilgjengelige og inneholder flere versjoner av denne klassen:

Lorsqu & # 039; il existe plusieurs fonctions surchargeses, kompilator ne sait pas quelle fonction doit etre utilisee. Il faut donc donner eksplisitt la signatur de la fonction, og effektive une konvertering.

Det er mulig a konvertere eksplisitt (cast) avec static_cast pour speccifier quelle versjon utnytter:

For eksempel, bor du lese:

Autre exemple, hente tilkoblingskonfigurasjoner QComboBox :: currentIndexChanged (int) ou QComboBox :: currentIndexChanged (QString), det er mulig a:

Det er mulig a bruke en del av den 5.7 fonjonen qOverload og C ++ 14 i klassen QOverload og C ++ 11.

Lorsqu finnes i tillegg til de fonksjonene som er konstante og ikke-konstante, og det er mulig a bruke fonksjoner qConstOverload et qNonConstOverload en C ++ 14 og QConstantover og QNonConstOverload en C ++ 11.

Connecter des lambdas, fonctions libres et foncteurs.

Det er mulig a utnytte fonction lambdas, fonctions libres og fonkteurs komme slot dance une connexion. Par eksempler, lorsque lette pa kobling til unntak QPushButton :: klikket avec un slot QLabel :: setText (QString) dans Qt 4, det er ikke mulig a gi den direkte instruksjonen.

Du kan ikke snakke om noe annet, for eksempel:

En nyttig leser, men er en mulig mulighet for a opprette:

Dans ce code, pa fange le pointeur vers liete ete et l’appelle dans la fonction lambda la fonction setText (). Dette er et resultat av at det er identisk med en kode som er mulig, men det kan hende at det ikke er mulig a koble til musikk fra fonction lambda (for eksempel, tilkobling til signaler og adresser til mottakeren).

Si le compilateur utilise ne supporte pas les variadic template, les signaux et slots doivent avoir moins de 6 parametres.

De la meme facon, pour les fonctions libres et les fonkteurs:

Supprimer les connexions.

Hell supprimer une connexion, plusieurs methodes sont possibles:

Hell appeler QObject :: koble fra, pluss a bruke syntaxer, ikke angi dokumentasjon:

Une autre approche pour supprimer une connexion est divert l’objet QMetaObject :: Connection retourne lors de la creation de unre connexion:

Problemer med validering av pointeurs dans les slots. A tester.

En C ++, er viktig for testere som er gyldige for de som er interessert i a bruke. C # # pour pour qu qu # # # # Q Q Q Q Q Q Q Q Q QPointer pour manipuler les objets derivant de QObject. I tillegg er det viktig at du ikke er interessert i dette spillet. Du kan ogsa se denne dansen, og du kan ikke tro at du er en fan av dette spillet.

A verifier: les recepteurs seraient attaches au connect et donc detruits, a verifier !!

Nouveautes du C ++ 14.

Le C + + 14 apporte quelques nouvelles syntaxes pour ecrire des fonctions lambdas: les fonctions lambdas generiques et la capture etendue.

Ces syntaxer er utilgjengelige avec Qt 5.1:

Resume des syntaxes utilisables.

Remarque: toutes ces fonctions er ikke statisk, sauf la deuxieme.

Konklusjon.

Vous pouvez telecharger un projet degent montrant ces nouvelles fonctionnalites en action: la page de telechargement sur GitHub.

Les bilder og koder for eksemple sont issus og parti de la dokumentation av Qt5 tilgjengelig pa denne siden: Signaler & amp; Spilleautomater.