LSI-TEC postes vacants pour les programmeurs

25 février 2008 · Posté dans Bla Bla Bla , C / C + + , Linux · Voir les commentaires

L' INS-TEC , une partie de la société Laboratoire de renommée internationale intégré sitema USP, est la recherche de talents pour travailler sur le développement de projets liés à la télévision numérique.

Exigences:

  • C, C + + ou Java;
  • Sitema Linux embarqué;
  • Subversion;
  • Autotools;

Localisation:
Université de Sao Paulo - City University Campus

Les parties intéressées peuvent envoyer leur curriculum vitae à:
Hillel Becher <hilel@lsi.usp.br>

Laboratoire de systèmes technologiques intégrés
Laboratoire des systèmes intégrés

Migration du serveur de blog

23 février 2008 · Posté dans Blog , MySQL · Voir les commentaires

Profitant de ce blog est d'avoir des difficultés techniques, j'ai décidé de le changer de serveur et mise à jour de la version cassée dans WordPress.

Les détails de la mise à jour de WordPress peut varier d'une version à et peuvent être trouvés sur le site .

Je pouvais utiliser les options d'import / export de WordPress soi, mais un des problèmes avec l'ancien fournisseur, était que je n'étais pas capable d'accéder à la zone administrative du blog. Sans même faire un téléchargement unique de tout ce que je ne pouvais plus entrer dans le blog et la réponse que j'ai obtenu était le fournisseur:

"... Contactez les développeurs du WordPress ...»

J'ai alors décidé de contacter un concurrent et de migrer vers l'ongle ...

L'amortissement avant j'ai utilisé étaient assez simples, et sont comme suit:

Embaucher le nouveau fournisseur

J'ai fait quelques recherches sur Internet, consulté des amis, et à la fin était juste de remplir un formulaire, numéro de carte de crédit et d'attendre la confirmation de paiement.

Sauvegarde

Alors j'ai attendu la confirmation du fournisseur de nouvelles, j'ai été la sauvegarde du blog. Comme j'ai eu trop de "junk" installé, j'ai décidé de sauvegarder la base de données avec les postes, et d'utiliser une version assez propre dans WordPress.

Pour sauvegarder le serveur MySQL j'ai utilisé l'un de ses ligne de commande mysqldump outils. Une des fonctionnalités les plus intéressantes (à mon avis) de MySQL et ses outils, est la capacité à les utiliser à distance. Cela a sauvé ma peau plusieurs fois dans les temps de sysadmin.

La commande était simple:

  =my.old.mysqlserver user @ host: ~ $ mysqldump - host = my.old.mysqlserver 
              - User = myuser - mot de passe 
              mybkp.sql - Bases de données myblogdatabase> mybkp.sql 

= My.old.mysqlserver-hôte: Connectez-vous à l'hôte où est ma base de données MySQL
Utilisateur = myuser: Utiliser ce serveur pour la connexion.
-Mot de passe: Demandez une invite de mot de passe. Si je voulais entrer dans le mot de passe directement, aurait pu faire-password = mypass.
Myblogdatabase-bases: Faire un dump de toutes les «myblogdatabase« tables de la base, utilisée par mon blog.
> Mybkp.sql: Rediriger la sortie vers un fichier.

Mysqldump génère tout le SQL nécessaire pour recréer la base de données dans le même état qu'il était.

Restauration des données

Au début du fichier de vidage est la référence à l'ancienne base de données. Si la nouvelle base de données a un nom différent, vous devez éditer le fichier de vidage. Cela peut être fait avec la commande sed:

  s /` olddatabase `/` newdatabase `/ mybkp.sql > mynewbkp.sql user @ host: ~ $ sed s / olddatabase `` / `` newdatabase / mybkp.sql> mynewbkp.sql 

La restauration est très simple, en utilisant l'invite mysql:

  =my.new.mysqlserver --user =myuser --password user @ host: ~ $ mysql - host = my.new.mysqlserver - user = myuser - mot de passe
 mysql> use newdatabase;
 mysql>.  mynewbkp.sql 

Cette logamos, nous entrons dans la nouvelle base, encore vide, et faire un fichier de vidage complet avec des instructions SQL pour recréer les tables et les données de l'ancien vers le nouveau.

Mise à jour WordPress

Mise à jour WordPress suit les étapes de base de l'installation : télécharger, décompresser, déplacer le contenu à l'endroit désiré et d'éditer le fichier wp-config.php.

Enfin, avec le navigateur, exécutez le fichier

http://my.blog.root.path/bla/bla/bla/wp-admin/upgrade.php

Et voila! Vous recevrez un mot de passe aléatoire pour l'utilisateur admin, connectez-vous.

Mise en place de WordPress

Lorsque le prestataire fournit le service, il fournit habituellement de deux façons pour vous d'accéder aux fonctions du site. L'une est la manière standard d'utiliser votre nom de domaine que l'adresse, puisque l'autre fournit la même capacité que l'url étrange. Aujourd'hui, j'ai trouvé pourquoi: alors que le fournisseur de DNS a été nommé à la première, j'ai accédé l'url dans le nouveau fournisseur étranges, sans interférer avec (MAL) fonctionnement de l'ancien site.

Après WordPro installée, toute tentative d'accéder au contenu, redirigé vers l'ancien blog. Puis je me suis souvenu qu'il ya deux options pour configurer l'url dans le blog. Était suffisant pour savoir où il était dans la base de données. Suivant la logique des noms de tables, arrivé à la wp_options table.

Utilisation de l'outil graphique Query Browser MySQL, modifiez les champs "option_value" qui correspondent à l'option 'option_name' les champs 'siteurl »et« maison »à cette url étrange, et j'ai commencé à utiliser et profiter de ce cours de la migration, tout en installant des plugins et des thèmes . Après tout est fait, j'ai changé le DNS et enfin restauré les valeurs d'origine dans les options. Cette ligne de commande devrait ressembler à ceci:

  ; mysql> select * from limite wp_options 1;
 +-----------+---------+-------------+------------- ------------+----------+
 blog_id | option_name | option_value | autoload | | Option_id | blog_id | option_name | option_value | chargement automatique |
 +-----------+---------+-------------+------------- ------------+----------+
 | 0 | siteurl | http: // mydomain.com / etc | yes | | 1 | 0 | siteurl | http:// mydomain.com / etc | oui |
 +-----------+---------+-------------+------------- ------------+----------+
 ( 0.00 sec ) 1 row in set (0.00 sec)

 ; mysql> select * from wp_options où option_value = 'http://mydomain.com/etc';
 +-----------+---------+-------------+------------- ------------+----------+
 blog_id | option_name | option_value | autoload | | Option_id | blog_id | option_name | option_value | chargement automatique |
 +-----------+---------+-------------+------------- ------------+----------+
 | 0 | siteurl | http: // mydomain.com / etc | yes | | 1 | 0 | siteurl | http:// mydomain.com / etc | oui |
 | 0 | home | http: // mydomain.com / etc | yes | | 40 | 0 | Accueil | http:// mydomain.com / etc | oui |
 +-----------+---------+-------------+------------- ------------+----------+
 ( 0.00 sec ) 2 rows in set (0.00 sec)

 option_value = 'http://url.estranha.com/etc' mysql> update wp_options Septembre option_value = 'http://url.estranha.com/etc' 
        où option_value = 'http://mydomain.com/etc';
 0.02 sec ) Query OK, 2 lignes affectées (0,02 sec)
 Warnings: 0 Rows matched: 2 Changed: 2 Avertissements: 0

 mysql> 

La commande SQL a été le premier à savoir quels champs de la table, la seconde pour vérifier quelles options ont la même URL et la troisième, enfin, la mise à jour. Après cela, le blog est déjà pointant vers l'adresse correcte du travail, et le retour peuvent être faites via le site normalement.

Conclusion

Migrer un blog sur l'ongle n'est pas la meilleure option, car vous risquez de perdre toutes les données. Je viens de si près, parce que je connais un peu le fonctionnement de WordPress et les outils autour. Pourtant, j'ai eu mes moments de suspense. Malgré gardant un foyer distinct de postes, je ne pouvais pas enregistrer vos commentaires et les options en général. D'une certaine manière il était bon pour moi d'obtenir intelligentes et aller faire mes sauvegardes hebdomadaires du site.

Patxi !!!!!!!!!!!

18 février 2008 · Posted in Evénements · Voir les commentaires

Combien de blogs ont été signalés comme le quotidien Campus Party Brésil, serait superflue si je fais de même. En fait, j'ai fait parce que je ne pouvais pas, et c'est la raison je ne pouvais pas, je vais vous dire ici.

Suite à l'appel de l'ami maintenant une grande Gustavo Gonzales, publiée dans le BR-linux , j'ai pris ce qui était un «vacances» et a décidé de postuler pour un poste en tant que bénévole pour travailler à la Campus Party. J'ai déjà du bénévolat pour des projets de logiciel libre, mais serait physiquement assister à la première fois.

J'ai pris contact, par courriel CV (il était pour les bénévoles au niveau technique), et le carnaval de lundi, j'ai reçu un courriel demandant de participer à la construction Biennale d'Ibirapuera mardi après-midi.

Une fois là, j'ai été présenté à Polkan (Colombie) et Pablo et Samira (Espagne), qui serait à nos ingénieurs. Nous savons où l'événement et serait arrangé pour être là le lendemain. Ils ont attendu environ 30 bénévoles, et il y avait de nombreux 2. Et je un ami maintenant aussi grande, Franci.

Nous sommes allés à la maison avec une mission pour trouver plus de volontaires que le jour suivant. Malgré toutes les circonstances au point au contraire, a obtenu le soutien de mon pote Gérard. Très heureux avec elle, j'ai appelé un ami d'enfance, Fernando, à Rio de Janeiro, et l'a convaincu de venir à São Paulo pour être volontaire. Celui qui est toujours prêt à aider à payer la poche prórpio et est juste pour être volontaire. Cela me rend si heureux que dixou appelé ma copine, Luciana, le Saint-Esprit, et l'a convaincue de prendre un avion pour venir ici.

Mercredi des Cendres - 06/02/2008

Je cherche et Geraldo Fernando Road, dans la matinée, garder vos bagages, nous prenions un café dans un padoca proximité et se rendit à Ibirapuera. Une fois là, trouver la Franci avec James et Patricia (Brave New) et est allé travailler. Mission: organiser et de décaisser les tables de plus de 50 km de câbles réseau (oui, 50 000 mètres de câble réseau !!!). Pourtant, le plus grand défi était de comprendre ce que les ingénieurs voulaient. L'énigme de Babel, a été résolue grâce à une poignée de main à trois voies: Ils parlait lentement en espagnol, nous nous réagi lentement en portugais, et nous ne la bande insiste sur l'anglais. Piece of cake!

A la fin de la journée cherchent à Luciana à l'aéroport et nous sommes tous allés au lit épuisée d'arrêter câble.

Jeudi - 02/07/2008

Antes da Tempestade Il semblait ne plus volontaire. Nous faisions le travail pour six heures trente. Nous avons fait un pacte silencieux de donner tout leur possible pour s'assurer que l'infrastructure réseau serait prêt à temps. Nous utilisons les trucs appris la veille et de coordonner une équipe de soutien aux banques pour la fin de tenir les câbles. Nous testons plus de 5 000 connecteurs RJ-45. En ce jour, nous commençons à perdre la notion du temps. Tous les rapports d'ici peut avoir corrompu la chronologie. À notre disposition étaient trois verbes: manger, dormir, travailler. La note de la journée a été l'idée d'acheter ces Mason gants. Ils ont sauvé nos mains des développeurs :)

Vendredi - 08/02/2008

Dès le premier jour nous avons vu que la langue serait une difficulté, mais pas un obstacle. Nous avons appris que plus important que de donner et / ou recevoir des ordres, était de comprendre et être compris.

Nous continuons à tester les connecteurs, et la fin de la journée, plus de deux mille mètres de fibre devrait être lancée et soigneusement protégés canaux sous bois lourd et de moisi. La moitié de la fibre a été libéré. La date limite approchait. Tension sur tous les côtés. On ne pouvait pas échouer. Nous nous engageons à elle.

Après beaucoup d'insistance, Fernando Pablo persuadé de partir avec nous pour une discussion informelle dans potuñolish, bien sûr!

Samedi - 09/02/2008

Ninho de Mafagafos Quatre heures de sommeil après le vendredi matin nous avons commencé à placer les canaux afin de protéger la première moitié de la fibre a lancé le vendredi, et il a donné beaucoup de mal. Le gros problème pour le reste de la fibre de lancement, était qu'il devait être lancé à un moment où il y avait circulation des personnes, comme meurtri pourrait l'endommager. Elle a dû être doucement libérés et protégés, ou tout travail pourrait être compromise. Ce moment est venu seulement en fin d'après midi, et avec moins de personnes donnant Pitaco, nous lançons le reste de la fibre beaucoup plus rapidement. Pourtant, la nuit varamos fibre de lancement. Point pour Luciana, qui, après une anonymes transformer le faisceau de fibres initiales dans un nid de Balrog, les débours et organisé toutes une par une, fortement accélérer le retrait de la même après l'événement.

Dimanche - 10/02/2008

Jantar Tests, patchs, les paramètres et les dispositifs. Tout devrait fonctionner, peu importe l'effort. L'événement débutera le lendemain. Nous travaillons à un moment comme celui où le soleil couché depuis un moment. Nous avons signalé notre quart de travail pendant l'événement. Les six serait travailler à partir de 23h00 jusqu'à h 19:00 le jour suivant. Les autres quarts de travail serait garanti par la Fondation affectueusement rebaptisé Vanzolini lors de l'événement, par campuseiros, Fondation [non, je ne vais pas écrire ici !!!].

Nous sommes allés à la maison avec un seul objectif en tête: dormir. Et la seule chose que nous avons fait pour le lendemain.

Lundi - 11/02/2008, le grand jour

Antes de ser atropelado pela manada de Reporterontes Nous sommes arrivés à l'événement juste avant l'ouverture officielle. J'ai eu l'honneur d'être renversé et presque piétiné par un troupeau de Reporterontes frénésie qui accompagne notre ministre de la Culture. Je pense que les rhinocéros ont été plus poli. Contrairement à eux, le ministre a été très sympathique et poli. Un exemple à suivre.

Abertura do Campus PArty Brasil 2008

De là, nous avons travaillé nuit et a essayé de profiter de la journée événement. Le sommeil? «Le sommeil est pour les mauviettes!" Et qui a stupéfié les Colombiens à nos amis: "Les Brésiliens ne sont pas humains", leurs paroles ...

Couverture traditionnelle:

Lundi , mardi , mercredi , jeudi , vendredi

Les descendeurs

Bien que promis lors de l'inscription, pas d'alimentation alternative pour ceux qui ont des restrictions alimentaires. Pour moi, la nourriture était bonne, mais beaucoup de végétariens à juste titre, se plaint parce que presque tout avait de la viande, et a reçu un sourire moqueur en réponse. J'ai vu. Regrettable. Le pire, c'est que le seul endroit qui vendait de la nourriture à l'intérieur de payer une fortune. Forcer les participants à quitter le parc pour manger un sandwich, et se voir interdire de sécurité plus tard. Quelle honte!

Sobras de brindes sendo recolhidas, com conteúdo descartado à esquerda Le Trophée «Maid of the Week" va à une entreprise de télécommunications, le principal sponsor de l'événement, qui, contrairement à toutes les autres sociétés à l'événement, a refusé de présenter des bénévoles avec un sac à dos rempli de propagande. Le plus ridicule a été l'excuse:

«Les bénévoles ne sont pas habilités à faire des sacs à dos. Les sacs sont des abonnés payants. "

Okay, okay, ils doivent être comptés, non? Faux. Les nombreuses personnes qui sont restés ont été réunis dimanche après-midi. Arrêtez tout. J'ai postulé en tant que bénévole, amené des amis de loin, en prenant notre propre argent pour aider à construire une infrastructure de réseau qui faisait de la publicité pour cette société. Puis j'ai entendu dire que je n'ai aucun "droit" de porter un toast. D'abord nous avons été volontaires. Nous y sommes allés volontiers. Aucune accusation. Sans rien attendre en retour. Puis une heure au large, je me tiens comme un client potentiel de cette société et le fait que le badge dit «Assistance technique», ce qui signifie que j'ai passé la matinée en aidant à s'assurer que d'autres clients potentiels d'utiliser le réseau de la même société, j'ai «droit» d'accéder au matériel de marketing de la même société? Il ya peu d'un paradoxe?

Le point ici n'est pas la question que je veux porter un toast. Le problème est que j'ai comme un client potentiel a été complètement ignorée simplement parce qu'il a travaillé à l'événement. Dans la constitution, il est appelé discrimination. Dans un sens je ne vais pas faim parce qu'ils ne reçoivent pas un cadeau qui ne coûte pas plus de 10,00 $, donc je suis intéressé par la réalisation d'un petit sac vert pour faire de la propagande libre, puisque je utiliser une Targus qui me sert très bien. Le point est que, puisque cette société a été le principal bénéficiaire de l'événement, je me sentais surtout utilisé pour travailler gratuitement pour son propre bien. Pour ces raisons et d'autres, je n'étais pas son client l'année dernière, et je ne regrette pas.

C'est une bonne chose: Vendredi, rentrés chez eux pour ramasser les sacs de Luciana, reviendrait à l'Esprit Saint dans les premières heures de samedi. Nous avons fini par arriver à l'Ibirapuera après minuit. Lorsque vous essayez d'entrer dans la grille 3 comme d'habitude, ont été empêchés par la sécurité du parc, qui a affirmé avoir reçu des ordres de ne laisser personne entrer. Ils ont refusé d'appeler à l'organisation, qui est très ironique et irrespectueux. Détails: Tous les barils ont été dûment accrédités et événement insigne, et plus, les gens qui étaient là pour travailler, tous les autres (une quinzaine de personnes) provenaient de villes lointaines et payés à dormir dans les tentes de l'événement. Il serait interdit d'entrer dans le sommeil. Il n'y avait refusé l'entrée aux étrangers pour dormir. Nous avons eu du mal à parler à l'organisation par téléphone parce que les téléphones ne fonctionnent pas bien à l'intérieur du bâtiment. Résultat: deux heures, nous ont été interdits à la porte jusqu'à ce qu'un campuseiro accompagner une fille à sortir et à devenir le sujet intéresse. Il a vite couru à l'assistance technique et a averti nos partenaires. Quinze minutes plus tard il y avait une "magie" afin de laisser tout le monde venir. Le pied. La voiture a été arrêtée en dehors du parc de parler avec l'organisation (qui a dit qu'il savait de tout ordre), et de renvoyer l'entrée gratuite, la voiture maintenant.

Une autre bonne: Bénévole à l'amende pour cinq minutes tard pour changer le ticket de parking bleu. Regardez, les gars quitte la maison, va travailler gratuitement à Ibirapuera volontiers acheter un ensemble de glissement perles roses et d'une amende pour travailler gratuitement et sont en retard de cinq minutes pour renouveler le billet a été déjà payé. Aucun droit de se plaindre. De stationnement des bénévoles n'a pas droit à ... est douce?

Alternative Party: Axe de classe. Sérieusement, personne ne mérite! Dans le milieu de la nuit! Pire, il a été publique! Et tous les deux eu deux questions du public ...

Ne pas obtenir une image avec le Mad Dog. Par Luciana at-il! : (

Points positifs

Radar Saber M60 L'innovation technologique majeure ont présenté un événement à Microsoft: Avec une bande passante disponible de 5.5Gbps, elle conduit à l'incroyable et sans précédent l'événement CD d'installation de MSN. Comment pourrais-je vivre sans elle jusqu'à maintenant?

Le niveau des discussions, j'ai assisté (sans dormir :) ) Je crois, est en ligne avec l'objectif de l'événement.

L'animation de la foule. Patxi !!!!!!!!!!!

La présence du chien fou.

Voir notre radar vieux copain Sachant armée brésilienne M60.

Une Présentation par Mark Bridges. Honnêtement, l'un des plus étonnants que j'ai jamais vu. Il vous fait vous sentir fiers de nous, de nos efforts. C'est seulement en entendant et voyant ses yeux brillants lorsqu'il parle de la signification de représenter le pays dans quelque chose d'unique. Vous ne pouvez pas décrire avec des mots. Il a été le seul orateur à une ovation debout pendant plusieurs minutes. Cette expérience a été un de ceux qui ont payé de l'argent.

Je pense que le plus gros point positif est d'avoir l'occasion d'échanger des expériences avec des personnes de différents pays. Nous avons fait de grands amis qui resteront à jamais. Nous avons appris entre autres choses, que la langue ne sera jamais une barrière aussi longtemps que le respect et la bonne volonté. La responsabilité, l'amitié et l'engagement, peut nous faire faire des choses que nous pensons normalement impossible. Nous n'avons pas parler le portugais, ne parlait pas anglais, ne parle pas espagnol. Nous parlions de quelque chose qui était suffisant pour développer la synergie qui nous a conduit à réaliser nos objectifs.

La chose la plus importante était que, bien qu'ils normalement ne fonctionnent pas avec l'infrastructure réseau et de soutien, nous nous sommes amusés. Même tourner la nuit dans le service, même si pratiquement aucun dormir pendant deux semaines. Que nous avons pris la maison de la Campus Party a été un trésor plus précieux que l'or. Pas d'argent qu'elle a payé.

«Attendez un instant, s'il vous plaît"

Je ne pouvais pas ne pas mentionner Gustavo, qui venaient de la Colombie sans parler portugais, avec seulement un dictionnaire de poche. Le premier jour, je confesse que j'ai regardé et j'ai pensé «dictionnaire à portée de main? mais ce n'est pas seulement dans le film? "Une semaine plus tard le gars était presque parler couramment le portugais. Je ne viens pas avec la culture que l'espagnol est similaire à portugais, portugais Guy parlait de la vérité! Il a insisté à atteindre. Remarquable. La chose drôle était l'écoutant: «Attendez un moment, s'il vous plaît", a déclaré phrase chaque fois qu'il allait rechercher n'importe quel mot dans le dictionnaire.

Finition

Après 14:00 h le dimanche, a pris part l'ensemble des équipements et de collecter les fibres. Défaire est beaucoup plus facile à faire ...

La nuit, si nous prenons nos amis étrangers pour la réunion de la Mongers social Sao Paulo Perl percé cette nuit-là.

Je remercie tous ceux qui ont travaillé avec nous et ont donné leur sueur pour le Brésil Campus Party a été un succès.

Quelques photos des racks peuvent être contrôlés de cette liaison .

À partir de l'intervalle QT, Partie II - Signaux, fentes et Timers

1 février 2008 · Posted in C / C + + , Qt · Voir les commentaires

Dans ce post, j'ai suivi avec le jeu pour faire des tutoriels pour débutants petits sur le QT. Cette fois je vais montrer comment créer votre propres signaux et slots et comment gérer une minuterie.

Le code source peut être trouvé à ce lien .

L'exemple de programme est un timer qui va utiliser la classe QTime , l'une des principales classes de QT, et va vous montrer le style d'affichage LCD à l'aide d'une calculatrice pour la classe QLCDNumber .

QT et Timers

Les minuteries de soutien les plus élémentaires de l'intervalle QT est disponible de la classe QObject qui fournit des méthodes QObject:: startTime () et QObject:: KillTimer () . La première méthode renvoie un ID unique et le second timer se termine le timer grâce à cette identification.

Pour que cela fonctionne, cependant, le morceau de code qui utilise ce mécanisme doit être dans une «boucle d'évènement". Une fois le chronomètre lancé de temps en temps (timeout) fait une demande Dispater QTimerEvent , qui perturbe le flux normal du programme jusqu'à l'événement est traité.

Le délai maximum n'est pas défini, il est possible de créer des minuteries avec temporisation d'années, cependant, le minimum de temps peut varier de système en système. Dans Windows Vista, la minuterie minimum est de 10 ms alors que dans Linux 2.6.x cela est configurable (par défaut est de 4 ms). Le QT va essayer de livrer tous les événements, comme l'avait demandé, mais si le système ne sera pas la laisser tomber le «surplus».

Des minuteries peuvent aussi être utilisés dans les discussions, mais vous devez respecter la condition d'être dans une boucle d'événement. Discussions méritent un article distinct, comme toujours ...

La classe QTime œuvre minuteries niveau supérieur, permettant à certaines fonctionnalités. L'un est le QTime: SingleShot () , qui déclenche un événement une fois.

Lisez la documentation vaste et répétitif, ennuyeux, mais croyez-moi, vous permettra d'économiser beaucoup d'QDorDeCabeca ...

Plus sur Signaux et Slots

Signaux et slots sont utilisés pour la communication entre les objets, une des pièces maîtresses de l'intervalle QT. Dans ce système plutôt que de mettre en œuvre des rappels pour gérer les événements, nous utilisons le concept de connecter les signaux aux slots, ce qui rend la programmation plus intuitive.

Signaux et slots sont les méthodes de classe qui sont manipulés par le compilateur méta-objet (moc) avant que le code source à compiler. Ils ont des états spéciaux qui ne font pas partie du standard C + +, donc fazum moc l'analyse du code source compilable et génère.

En exécutant la commande moc sur toute classe qui implémente les signaux et slots, une certaine quantité de code source est généré. Avec l'utilisation du programme qmake , moc l'appel au programme est en place dans le Makefile, ce qui rend transparente pour le programmeur.

Pour une classe peut implémenter signaux et des slots, il doit avoir accès à l' Meta System-Object . Ainsi, il devrait hériter de la classe QObject et de ses sous-classes, et ont besoin de la macro Q_OBJECT dans leur domaine de déclaration de confidentialité. Terminé les préparatifs, les signes sont déclarées dans une section «signaux» dans les sections et les slots "[public | protégé | privé] slots".

Une fente après déclaré, est alors définie comme toute autre méthode commune, peut être appelé explicitement comme un autre. Déjà, les signes sont un peu plus délicat, et ne sont jamais déclarées et définies par le programmeur. La raison? Le message à la fin de la tentative de construire:

 tmp / moc_mydisplay.o: In function `MyDisplay: signalPlay () ':
 ~ / Chronomètre / tmp / moc_mydisplay.cpp: 89: définitions multiples de `MyDisplay: signalPlay () '
 tmp / mydisplay.o: ~ / chronomètre / mydisplay.cpp: 169: tout d'abord défini ici
 collect2: ld returned 1 exit status
 Marque: ** [chrono] Erreur 1

A l'intérieur du fichier est généré moc_mydisplay.cpp le code suivant:

  / / Signal 0
 signalPlay ( ) void MyDisplay: signalPlay ()
 {
     activate ( this , & staticMetaObject , 0 , 0 ) ; QMetaObject:: activer (cela, & staticMetaObject, 0, 0);
 } 

Oui, moc génère des signaux avec la définition de ce qu'on appelle méta-méthodes de l'intervalle QT. Par conséquent, la définition du corps d'un signal dans l'intervalle QT est illégal et va générer une erreur de compilation en réinitialisant la méthode. Laissez-moc prend soin de la mise en œuvre du signal pour vous.

Connectez-

Ce n'est pas de bons signaux et slots vient de mettre. Vous devez définir la façon dont ils interagissent. La façon de faire est de les relier à travers la fonction connect () présents dans chaque méthode héritier de QObject . Ce moc mettra en œuvre le signal de sorte qu'un appel à elle se traduit par un appel à (s) emplacement (s) connecté (s) avec les mêmes paramètres.

Selon le contexte, un signal peut même retourner la même valeur que le dernier emplacement rappelé. Notez que ce n'est pas très sûr pour les signaux connectés à plusieurs fentes, par conséquent, rien ne garantit l'ordre nommé.

Un signal donné peut être raccordé à un second signal directement. Un émettent () sur le premier signal est alors équivalente à une émission () dans le deuxième signal, car après l'étape de la création d'moksha, les résultats appellent dans le premier appel à la seconde, qui se traduit par l'appel connecté à une autre méthode et ainsi de suite .

Comment se connecter à

Il existe essentiellement trois façons de se connecter les signaux et slots et s'il n'est pas utilisé correctement peut être une source de bugs terriblement difficile à découvrir. Ces formes de connexion sont passés comme des paramètres supplémentaires à l'méthode connect (). Ils sont:

Direct Connect : Le slot est appelé immédiatement le signal a été émis dans le thread où le signal a été émis. Cela agit comme un appel direct à la fente.

Raccordement en attente : Le signal est envoyé et l'appel à la fente va à une liste interne de l'intervalle QT, et le signal retourne immédiatement, indépendamment de l'emplacement ont été appelés ou non. La boucle de l'événement sera alors le traitement de cette liste, et seulement plus tard, l'emplacement est appelé sur le thread où réside l'objet sous.

Auto-Connect : Ceci est le type utilisé par défaut lorsque vous ne spécifiez pas le type de connexion. Il est l'un des «Seeds of Evil» , elle présente deux comportements distincts: si le signal et le slot réside sur le même fil, fonctionne comme une connexion directe, mais travaille autrement connexion comme file d'attente.

Blocage connexions en attente : Huh? ne sont pas seulement trois? Eh bien, c'est l'un des avantages de cet article lu: vous sauve la documentation contradictoires! Cette connexion est similaire à la connexion en attente, sauf que le signal que le fil est bloqué jusqu'à ce que le signal soit dûment signé. Remarque qui ne devrait être utilisé très prudemment, et les signaux et slots sur différents threads. Une mauvaise utilisation peut aussi causer des blocages. Vous saurez quand vous voyez quelque chose comme ceci:

 utilisateur @ hôte:. ~ / chronomètre $ / chronomètre
 Qt: impasse détecté tout en activant le BlockingQueuedConnection: Sender est
 QPushButton (0x807e2d8) récepteur est MyDisplay (0x8076ac0)

Pour répondre à des questions sur ce qu'on entend par "thread où réside un objet" consulter les fils QT arespeito.

Il faut toujours prendre grand soin de signaux, les slots, les discussions et les minuteries. Ce sont des caractéristiques clés de l'intervalle QT, mais son utilisation abusive peut conduire à des bugs très difficiles à localiser. Voir toute la documentation à ce sujet.

Bas à la source

Notre exemple est composée de deux classes et MyDisplay chronomètre et un fichier commun principal. La principale et crée seulement un objet QApplication Chronomètre. La classe prend soin de MyDisplay partie visuelle du programme, composé d'un dialogue avec des boutons et un style d'affichage à cristaux liquides. La classe StopWatch va créer un widget pour afficher et mettre en œuvre la minuterie. Notez que cette architecture n'est pas la plus elegent, plus intéressant d'hériter de la classe MyDisplay Chronomètre. Mais ce serait gâcher le plaisir éliminant pratiquement la nécessité d'utiliser des signaux et slots.

L'utilisation des signaux et slots devient plus claire lorsque l'on veut des objets à communiquer avec l'extérieur. En général, les classes ne sais pas ce qui est dehors. Passant des pointeurs vers des objets externes en leur sein, il blesse l'encapsulation et rend le code plus générique. Dans notre exemple, le plus intéressant d'utiliser des signaux et des slots est myDisplay à l'objet (le StopWatch interne) des événements du rapport de / vers le chronomètre objet (Mydisplay externe), car elle sans se perdre en généralité ou l'encapsulation.

Avec l'aide de Qt Designer (dans un autre article je vais vous parler d'elle), j'ai créé les dialogues, les boutons et l'écran LCD. Après simplifié le code pour l'adapter à nos besoins. Comment myDisplay hérite de QDialog, et ce hérite indirectement de QObject, d'utiliser des signaux et slots il suffit d'ajouter la macro Q_OBJECT dans la section privée de la déclaration de classe. Après cela, j'ai ajouté entre autres méthodes auxiliaires:

  public slots:
     long ) ; slotDisplayValue vide (long terme);

 slots privé:
     nulle slotPlay ();
     nulle slotStop ();

 signaux:
     nulle signalPlay ();
     nulle signalPause ();
     nulle signalStop ();
     nulle signalReset (); 

Les signes de communiquer sur les événements liés à l'extérieur de clics de bouton. Déjà les fentes privés feront une procédure de pré-traitement, tandis que le public a droit à des tiques minuterie externe. Ainsi la classe envoie des informations vers l'extérieur et reçoit des informations provenant de l'extérieur, sans savoir ce qu'il ya sur l'autre côté. Bonne contrat de l'ancienne interface.

  public slots:
     nulle slotPlay ();
     nulle slotPause ();
     nulle slotStop ();
     nulle slotReset ();

 slots privé:
     nulle slotTick ();

 signaux:
     long ) ; signalTicks vide (long terme); 

Analogique et inversement la classe StopWatch œuvre les fentes qui reçoivent la classe MyDisplay signaux, et déclare le signal qui envoie l'information au public son logement.

Elle implémente également un QTime qui se déclenche toutes les 10 millisecondes (de sorte que nos amis peuvent suivre lerdinhos Vista!), Incrémentation d'un compteur. Ce compteur est renvoyé à des formats d'affichage et de présentoirs.

La minuterie peut être arrêté, suspendu ou repris à tout moment en cliquant sur le bouton approprié.

Le Finalmentes

L'exemple de code en soi n'est pas beaucoup, mais il illustre l'utilisation les plus élémentaires de minuteries et de la construction des signaux et slots personnalisés. Une attention toute particulière doit cependant être accordée aux détails qui impliquent l'utilisation de ces ressources, ils peuvent devenir des pièges mortels.

Liens importants

Signaux et Slots
QTime
Discussions dans le QT
La documentation en ligne de l'intervalle QT