QObjectLa classe QObject est la classe de base de tous les objets Qt. Plus d'informations... #include <QObject> Voir la position dans l'arbre des classes. H�ritageH�rit� par Phonon::AudioOutput, Phonon::BackendCapabilities::Notifier, Phonon::Effect, Phonon::MediaController, Phonon::MediaObject, Q3Accel, Q3Action, Q3Canvas, Q3Dns, Q3DragObject, Q3EditorFactory, Q3FileIconProvider, Q3NetworkOperation, Q3NetworkProtocol, Q3Process, Q3ServerSocket, Q3Signal, Q3SqlForm, Q3StyleSheet, Q3UrlOperator, Q3WhatsThis, QAbstractAnimation, QAbstractEventDispatcher, QAbstractFontEngine, QAbstractItemDelegate, QAbstractItemModel, QAbstractMessageHandler, QAbstractNetworkCache, QAbstractState, QAbstractTextDocumentLayout, QAbstractTransition, QAbstractUriResolver, QAbstractVideoSurface, QAccessibleBridgePlugin, QAccessiblePlugin, QAction, QActionGroup, QAudioInput, QAudioOutput, QAxFactory, QAxObject, QAxScript, QAxScriptManager, QButtonGroup, QClipboard, QCompleter, QCopChannel, QCoreApplication, QDataWidgetMapper, QDBusAbstractAdaptor, QDBusAbstractInterface, QDBusPendingCallWatcher, QDBusServiceWatcher, QDeclarativeComponent, QDeclarativeContext, QDeclarativeEngine, QDeclarativeExpression, QDeclarativeExtensionPlugin, QDeclarativePropertyMap, QDeclarativeTypeLoader, QDecorationPlugin, QDesignerFormEditorInterface, QDesignerFormWindowManagerInterface, QDirectPainter, QDrag, QEventLoop, QExtensionFactory, QExtensionManager, QFileSystemWatcher, QFontEnginePlugin, QFtp, QFutureWatcher, QGesture, QGLShader, QGLShaderProgram, QGraphicsAnchor, QGraphicsEffect, QGraphicsItemAnimation, QGraphicsObject, QGraphicsScene, QGraphicsTransform, QHelpEngineCore, QHelpSearchEngine, QHttp, QIconEnginePlugin, QIconEnginePluginV2, QImageIOPlugin, QInputContext, QInputContextPlugin, QIODevice, QItemSelectionModel, QKbdDriverPlugin, QLayout, QLibrary, QLocalServer, QMimeData, QMouseDriverPlugin, QMovie, QNetworkAccessManager, QNetworkConfigurationManager, QNetworkCookieJar, QNetworkSession, QObjectCleanupHandler, QPictureFormatPlugin, QPluginLoader, QScreenDriverPlugin, QScriptEngine, QScriptEngineDebugger, QScriptExtensionPlugin, QSessionManager, QSettings, QSharedMemory, QShortcut, QSignalMapper, QSignalSpy, QSocketNotifier, QSound, QSqlDriver, QSqlDriverPlugin, QStyle, QStylePlugin, QSvgRenderer, QSyntaxHighlighter, QSystemTrayIcon, QTcpServer, QTextCodecPlugin, QTextDocument, QTextObject, QThread, QThreadPool, QTimeLine, QTimer, QTranslator, QUiLoader, QUndoGroup, QUndoStack, QValidator, QWebFrame, QWebHistoryInterface, QWebPage, QWebPluginFactory, QWidget, QWSClient, QWSInputMethod et QWSServer. Note : toutes les fonctions dans cette classe sont r�entrantes mais connect(), connect(), disconnect() et disconnect() sont aussi thread-safe. Description d�taill�eLa classe QObject est la classe de base de tous les objets Qt. QObject est le coeur du mod�le objet de Qt. La caract�ristique centrale de ce mod�le est un m�canisme tr�s puissant de communication homog�ne entre objets, appel� signaux et slots. Vous pouvez connecter un signal � un slot avec la fonction connect() et d�truire cette connexion avec la fonction disconnect(). Pour �viter des boucles de notifications sans fin, vous pouvez les bloquer temporairement avec la fonction blockSignals(). Les fonctions prot�g�es connectNotify() et disconnectNotify() rendent possible le suivi des connexions. Les QObjects s'organisent dans des arbres d'objets. Quand vous cr�ez un QObject avec un autre objet comme parent, celui-ci s'ajoutera automatiquement � la liste d'enfants children() du parent. Le parent devient propri�taire de l'objet, cela signifie qu'il supprimera automatiquement ses enfants dans son destructeur. Vous pouvez chercher un objet par son nom et �ventuellement son type en utilisant les fonctions findChild() et findChildren(). Chaque objet poss�de un objectName() (nom d'objet) et le nom de sa classe peut �tre trouv� gr�ce au metaObject() correspondant (voir QMetaObject::className()). Vous pouvez d�terminer si la classe de l'objet h�rite d'une autre classe dans la hi�rarchie d'h�ritage de QObject en utilisant la fonction inherits(). Quand un objet est d�truit, il �met un signal destroyed(). Vous pouvez utiliser ce signal pour �viter les r�f�rences cass�es � des QObject. Les QObject peuvent recevoir des �v�nements � travers event() et filtrer les �v�nements d'autres objets. Voir installEventFilter() et eventFilter() pour plus de d�tails. Le gestionnaire childEvent() peut-�tre r�impl�ment� pour recevoir les �v�nements des enfants. Les �v�nements sont d�livr�s dans le thread dans lequel l'objet a �t� cr�� ; voir Support des threads dans Qt et thread() pour plus de d�tails. Notez que le traitement des �v�nements n'est pas du tout r�alis� pour les QObject n'�tant pas li�s � un thread (thread() retourne z�ro). Utilisez la fonction moveToThread() pour changer le thread auquel est li� un objet et ses enfants (l'objet ne peut pas �tre d�plac� s'il a un parent). Pour finir, QObject propose le support d'une minuterie basique dans Qt ; voir QTimer pour le support des minuteries de haut niveau. Notez que la macro Q_OBJECT est obligatoire pour tout objet qui impl�mente des signaux, des slots ou des propri�t�s. Vous devez �galement ex�cuter le compilateur de m�ta objets sur le fichier source. Nous vous recommandons fortement d'utiliser cette macro dans toutes les sous-classes de QObject, qu'elles utilisent ou non des signaux, des slots ou des propri�t�s, car ne pas le faire peut entra�ner un comportement �trange de certaines fonctions. Tous les widgets de Qt h�ritent de QObject. La fonction isWidgetType() retournera si un objet est r�ellement un widget ou non. Elle est beaucoup plus rapide que qobject_cast<QWidget *>(obj) ou obj->inherits("QWidget"). Certaines fonctions de QObject, par exemple children(), retournent une QObjectList. QObjectList est un typedef de QList<QObject *>. Pas de constructeur de copie ni d'op�rateur d'assignationQObject n'a ni constructeur de copie, ni op�rateur d'assignation, du fait de sa conception. En r�alit�, ils sont d�finis mais dans une section private avec la macro Q_DISABLE_COPY(). En fait, toutes les classes de Qt d�riv�es de QObject (directement ou non) utilisent cette macro pour d�clarer leur constructeur de copie et leur op�rateur d'assignation comme �tant private. La raison de ceci est expos�e dans la discussion Identit� versus valeur du mod�le objet de Qt. La principale cons�quence est que vous devriez utiliser des pointeurs sur QObject (ou sur les sous-classes de QObject) l� o� vous auriez �t� tent�s d'utiliser vos sous-classes comme une valeur. Par exemple, sans constructeur de copie, vous ne pouvez pas utiliser une sous-classe de QObject comme une valeur � stocker dans une des classes conteneurs. Vous devez utiliser des pointeurs. Auto-connexionLe syst�me de m�ta-objets de Qt propose un m�canisme pour connecter automatiquement les signaux et slots entre les sous-classes de QObjet et leurs enfants. Du moment que les objets sont d�finis avec des noms appropri�s et que les slots suivent une simple convention de nommage, cette connexion peut se faire pendant l'ex�cution gr�ce � la fonction QMetaObject::connectSlotsByName(). uic g�n�re un code qui appelle cette fonction pour activer l'auto-connexion entre les widgets des formulaires cr��s avec Qt Designer. Plus d'informations sur l'utilisation de l'auto-connexion avec Qt Designer sont donn�es dans la section Utiliser un fichier de design UI dans votre application du manuel de Qt Designer. Propri�t�s dynamiquesDepuis Qt 4.2, des propri�t�s dynamiques peuvent �tre ajout�es ou supprim�es sur des instances de QObject pendant l'ex�cution. Les propri�t�s dynamiques ne n�cessitent pas d'�tre d�clar�es � la compilation. Cependant, elles offrent les m�mes avantages que des propri�t�s statiques et sont manipul�es � l'aide de la m�me API, en utilisant property() pour les lire et setProperty() pour les �crire. Depuis Qt 4.3, les propri�t�s dynamiques sont support�es par Qt Designer et des propri�t�s dynamiques peuvent �tre ajout�es � la fois aux widgets standards de Qt et aux formulaires cr��s par l'utilisateur. Tous les d�riv�s de QObject supportent la fonctionnalit� de traduction de Qt, rendant possible la traduction de l'interface utilisateur d'une application dans plusieurs langues. Pour rendre le texte visible � l'utilisateur traducteur, il doit �tre entour� dans des appels � la fonction tr(). Ceci est expliqu� en d�tail dans �crire du code source pour la traduction. Voir aussi QMetaObject, QPointer, QObjectCleanupHandler, Q_DISABLE_COPY() et Arbres et possession d'objets. Propri�t�sobjectName : QStringCette propri�t� d�tient le nom de cet objet. Vous pouvez trouver un objet par son nom (et le type) � l'aide de findChild(). Vous pouvez trouver un ensemble d'objets avec findChildren(). qDebug("MyClass::setPrecision() : (%s) pr�cision invalide %f", qPrintable(objectName()), newPrecision); Par d�faut, cette propri�t� contient une cha�ne de caract�res vide. Fonctions d'acc�sQString objectName () const void setObjectName ( const QString & name ) Voir aussi metaObject() et QMetaObject::className(). Fonctions membresQ_INVOKABLE QObject::QObject ( QObject * parent = 0 )Construit un objet avec parent comme objet parent. Le parent d'un objet peut �tre vu comme le possesseur de l'objet. Par exemple, une bo�te de dialogue est le parent des boutons OK et Cancel qu'elle contient. Le destructeur d'un objet parent d�truit tous ses objets enfants. Mettre parent � 0 construit un objet sans parent. Si cet objet est un widget, il deviendra une fen�tre. Voir aussi parent(), findChild() et findChildren(). QObject::~QObject () [virtual]D�truit l'objet et occasionne la suppression de tous ses objets enfants. Tous les signaux vers et depuis l'objet sont automatiquement d�connect�s et toute attente d'�v�nements post�e pour l'objet est supprim�e de la file d'�v�nements. Cependant, il est souvent recommand� d'utiliser deleteLater() plut�t que de supprimer directement une sous-classe de QObject. Attention : tous les objets enfants sont supprim�s. Si l'un de ces objets est sur la pile ou global, t�t ou tard votre programme plantera. Nous d�conseillons de garder des pointeurs vers des objets enfants � l'ext�rieur du parent. Si vous persistez � vouloir le faire, le signal destroyed() vous donne une chance de d�tecter quand un objet est d�truit. Attention : la suppression d'un QObject alors que les �v�nements en cours sont en attente d'�tre d�livr�s peut provoquer un plantage. Vous ne devez pas supprimer le QObject directement s'il existe dans un autre thread que celui o� il est actuellement ex�cut�. Utilisez plut�t deleteLater(), qui demandera � la boucle �v�nementielle de supprimer l'objet apr�s que tous les �v�nements � venir lui sont d�livr�s. Voir aussi deleteLater(). bool QObject::blockSignals ( bool block )Si block vaut true, les signaux �mis par cet objet sont bloqu�s (c'est-�-dire que, en �mettant un signal, quelque chose qui lui est connect� ne sera pas invoqu�). Si block vaut false, aucun blocage ne se produira. La valeur retourn�e est la valeur pr�c�dente de signalsBlocked(). Notez que le signal destroyed() sera �mis m�me si les signaux de cet objet ont �t� bloqu�s. Voir aussi signalsBlocked(). void QObject::childEvent ( QChildEvent * event ) [virtual protected]Ce gestionnaire d'�v�nements peut �tre r�impl�ment� dans un d�riv� pour recevoir les �v�nements des enfants. L'�v�nement est pass� par le param�tre event. Les �v�nementsQEvent::ChildAdded et QEvent::ChildRemoved sont envoy�s aux objets quand les enfants sont ajout�s ou supprim�s. Dans les deux cas, vous ne pouvez vous reposer que sur le fait qu'un enfant est un QObject ou, si isWidgetType() retourne true, un QWidget, parce que, dans le cas ChildAdded, l'enfant n'est pas encore compl�tement construit et, dans le cas ChildRemoved, il peut d�j� �tre d�truit. Les �v�nements QEvent::ChildPolished sont envoy�s aux widgets quand les enfants sont polis ou quand des enfants polis sont ajout�s. Si vous recevez un �v�nement de polissage d'enfant, sa construction est g�n�ralement achev�e. Cependant, ceci n'est pas garanti et de multiples �v�nements de polissage peuvent �tre envoy�s pendant l'ex�cution du constructeur d'un widget. Pour tous les widgets enfants, vous recevez un �v�nement ChildAdded, z�ro ou plusieurs �v�nements ChildPolished et un �v�nement ChildRemoved. L'�v�nement ChildPolished est omis si un enfant est supprim� imm�diatement apr�s qu'il est ajout�. Si un enfant est poli plusieurs fois durant sa construction et sa destruction, vous recevrez peut-�tre plusieurs �v�nements de polissage pour les enfants, chaque fois avec une table virtuelle diff�rente. Voir aussi event(). const QObjectList & QObject::children () constRetourne une liste d'objets enfants. La classe QObjectList est d�finie dans le fichier d'en-t�te <QObject> comme ceci : typedef QList<QObject*> QObjectList; Le premier enfant ajout� est le premier objet dans la liste et le dernier enfant ajout� est le dernier objet dans la liste, c'est-�-dire que les nouveaux enfants sont ajout�s � la fin. Notez que, lorsque les enfants QWidget sont �lev�s ou abaiss�s, l'ordre de la liste change. Un widget qui est �lev� devient le dernier objet dans la liste et un widget qui est abaiss� devient le premier objet dans la liste. Voir aussi findChild(), findChildren(), parent() et setParent(). bool QObject::connect ( const QObject * sender, const char * signal, const QObject * receiver, const char * method, Qt::ConnectionType type = Qt::AutoConnection ) [static]Cr�e une connexion du type donn� entre le signal de l'objet sender et la m�thode method de l'objet receiver. Retourne true si la connexion s'est faite correctement, false sinon. Vous devez utiliser les macros SIGNAL() et SLOT() en sp�cifiant le signal et la m�thode method, par exemple : QLabel *label = new QLabel; QScrollBar *scrollBar = new QScrollBar; QObject::connect(scrollBar, SIGNAL(valueChanged(int)), label, SLOT(setNum(int))); Cet exemple s'assure que le label affiche toujours la valeur courante de la barre de d�filement. Notez que les param�tres du signal et du slot ne doivent pas contenir de nom de variable, seulement le type. Par exemple, le code suivant ne fonctionnera pas et retournera false : // Mauvais QObject::connect(scrollBar, SIGNAL(valueChanged(int value)), label, SLOT(setNum(int value))); Un signal peut �galement �tre connect� � un autre signal : class MonWidget : public QWidget { Q_OBJECT public: MonWidget(); signals: void buttonClicked(); private: QPushButton *monBouton; }; MonWidget::MonWidget() { monBouton = new QPushButton(this); connect(monBouton, SIGNAL(clicked()), this, SIGNAL(buttonClicked())); } Dans cet exemple, le constructeur de MonWidget retransmet un signal depuis une variable membre priv�e (monBouton) et le rend disponible sous un nom relatif � MonWidget. Un signal peut-�tre connect� � plusieurs slots et signaux, de m�me que plusieurs signaux peuvent �tre connect�s � un m�me slot. Si un signal est connect� � plusieurs slots, ceux-ci sont appel�s au moment o� le signal est �mis, dans le m�me ordre que les connexions ont �t� �tablies. Cette fonction retourne true si la connexion entre le signal et le slot a �t� �tablie avec succ�s. Elle retourne false si la connexion n'a pas pu �tre cr��e, par exemple si QObject est incapable de v�rifier l'existence du signal ou de la m�thode method ou si leur signature n'est pas compatible. Par d�faut, un signal est �mis � chaque connexion que vous faites ; deux signaux sont �mis pour des connexions doubles. Vous pouvez casser toutes ces connexions avec un unique appel de disconnect(). Si vous passez le type Qt::UniqueConnection, la connexion sera �tablie si ce n'est pas un doublon. S'il y a d�j� un doublon (exactement le m�me signal et le m�me slot des m�mes objets), la connexion �chouera et la fonction retournera false. Le param�tre optionnel type d�crit le type de connexion � �tablir. Entre autres, il d�termine si un signal particulier est d�livr� imm�diatement � un slot ou mis en file pour �tre d�livr� plus tard. Si le signal est mis en file, le type des param�tres doit �tre connu par le syst�me de m�ta-objets de Qt, parce que Qt doit copier les arguments et les stocker dans un �v�nement cach�. Si vous tentez d'utiliser une connexion avec mise en file et que vous obtenez l'erreur suivante : QObject::connect: Cannot queue arguments of type 'MyType' (Make sure 'MyType' is registered using qRegisterMetaType().) Appelez qRegisterMetaType() pour enregistrer le type de donn�es avant d'�tablir la connexion. Note : cette fonction est thread-safe. Voir aussi disconnect(), sender() et qRegisterMetaType(). bool QObject::connect ( const QObject * sender, const char * signal, const char * method, Qt::ConnectionType type = Qt::AutoConnection ) constIl s'agit d'une fonction surcharg�e de connect(). Connecte le signal de l'objet sender � sa m�thode method. �quivalent � connect(sender, signal, this, method, type). Chaque connexion que vous faites �met un signal et, de ce fait, des connexions doubles �mettent deux signaux. Vous pouvez casser une connexion gr�ce � disconnect(). Note : cette fonction est thread-safe. Voir aussi disconnect(). void QObject::connectNotify ( const char * signal ) [virtual protected]Cette fonction virtuelle est appel�e quand quelque chose est connect� au signal de cet objet. Si vous voulez comparer le signal avec un signal sp�cifique, utilisez QLatin1String et la macro SIGNAL() comme ceci : if (QLatin1String(signal) == SIGNAL(valueChanged(int))) { // le signal est valueChanged(int) } Si le signal contient plusieurs param�tres ou des param�tres qui contiennent des espaces, appelez QMetaObject::normalizedSignature() sur le r�sultat de la macro SIGNAL(). Attention : cette fonction viole le principe orient� objet de modularit�. Cependant, il peut �tre utile de ne faire une initialisation lourde que si quelque chose est connect� � un signal. Voir aussi connect() et disconnectNotify(). void QObject::customEvent ( QEvent * event ) [virtual protected]Ce gestionnaire d'�v�nements peut �tre r�impl�ment� dans un d�riv� pour recevoir des �v�nements personnalis�s, des �v�nements d�finis par l'utilisateur avec une valeur de type au moins aussi grande que l'objet QEvent::User de l'�num�ration QEvent::Type, d'habitude un d�riv� de QEvent. L'�v�nement est pass� par le param�tre event. void QObject::deleteLater () [slot]Marque cet objet pour suppression. L'objet sera d�truit quand la boucle �v�nementielle reprendra le contr�le. Si elle n'est pas lanc�e quand cette fonction est appel�e (par exemple si elle est appel�e sur un objet avant QCoreApplication::exec()), l'objet sera d�truit d�s qu'elle sera lanc�e. Notez qu'entrer et sortir de la boucle (par exemple en ouvrant une bo�te de dialogue modale) n'effectuera pas de suppression diff�r�e ; pour que l'objet soit supprim�, la boucle depuis laquelle deleteLater() est appel�e doit reprendre le contr�le. Note : il est s�r d'appeler cette fonction plus d'une fois ; quand la premi�re suppression diff�r�e est arriv�e, tout �v�nement en attente concernant l'objet est supprim� de la queue des �v�nements. Voir aussi destroyed() et QPointer. void QObject::destroyed ( QObject * obj = 0 ) [signal]Ce signal est �mis imm�diatement avant que l'objet obj soit d�truit et ne peut pas �tre bloqu�. Tous les enfants des objets sont d�truits imm�diatement apr�s que ce signal soit �mis. Voir aussi deleteLater() et QPointer. bool QObject::disconnect ( const QObject * sender, const char * signal, const QObject * receiver, const char * method ) [static]D�connecte le signal appartenant � l'objet sender de la m�thode method appartenant � l'objet receiver. Retourne true si la connexion a �t� cass�e avec succ�s, renvoie false sinon. Une connexion signal-slot est supprim�e quand l'un ou l'autre des objets concern�s est d�truit. disconnect() est habituellement utilis�e de trois fa�ons, comme l'illustrent les exemples suivants :
disconnect(myObject, 0, 0, 0); �quivalent � la fonction surcharg�e non statique : myObject->disconnect();
disconnect(myObject, SIGNAL(mySignal()), 0, 0); �quivalent � la fonction surcharg�e non statique : myObject->disconnect(SIGNAL(mySignal()));
disconnect(myObject, 0, myReceiver, 0); �quivalent � la fonction surcharg�e non statique : myObject->disconnect(myReceiver); 0 peut-�tre utilis� en remplacement pour signifier respectivement « tous les signaux », « tous les objets recevant » ou « tous les slots dans l'objet recevant ». Le sender ne doit jamais �tre 0. (Vous ne pouvez pas d�connecter des signaux pour plus d'un seul objet � la fois). Si le signal est 0, la fonction d�connecte l'objet receiver et la m�thode method de tout les signaux. Sinon, seul le signal sp�cifi� est d�connect�. Si receiver vaut 0, la fonction d�connecte tout ce qui est connect� au signal. Sinon, les slots appartenant � des objets diff�rents de receiver ne sont pas d�connect�s. Si method vaut 0, la fonction d�connecte tout ce qui est connect� au receiver. Sinon, seuls les slots appel�s method seront d�connect�s. method doit valoir 0 si receiver est omis, vous ne pouvez donc pas d�connecter un slot ayant un nom particulier sur tous les objets. Note : cette fonction est thread-safe. Voir aussi connect(). bool QObject::disconnect ( const char * signal = 0, const QObject * receiver = 0, const char * method = 0 )Cette fonction surcharge disconnect(). D�connecte le signal de la m�thode method de l'objet receiver. Une connexion signal-slot est supprim�e lorsque l'un des objets impliqu�s est d�truit. Note : cette fonction est thread-safe. bool QObject::disconnect ( const QObject * receiver, const char * method = 0 )Cette fonction surcharge disconnect(). D�connecte tous les signaux de cet objet receiver de method Une connexion signal-slot est supprim�e lorsque l'un des objets impliqu�s est d�truit. void QObject::disconnectNotify ( const char * signal ) [virtual protected]Cette fonction virtuelle est appel�e quand quelque chose a �t� d�connect� du signal de cet objet. Voir connectNotify() pour un exemple de comparaison entre le signal et un signal sp�cifique. Attention : cette fonction viole le principe orient� objet de modularit�. Cependant, elle peut �tre utile pour optimiser l'acc�s � des ressources lourdes. Voir aussi disconnect() et connectNotify(). void QObject::dumpObjectInfo ()Affiche des informations entre autres sur les connexions des signaux de cet objet sur la sortie de d�bogage. Cette fonction est utile pour le d�bogage mais ne fait rien si la biblioth�que a �t� compil�e en release (c'est-�-dire sans les informations de d�bogage). Voir aussi dumpObjectTree(). void QObject::dumpObjectTree ()Affiche un arbre des enfants sur la sortie de d�bogage. Cette fonction est utile pour le d�bogage mais ne fait rien si la biblioth�que a �t� compil�e en release (c'est-�-dire sans les informations de d�bogage). Voir aussi dumpObjectInfo(). QList<QByteArray> QObject::dynamicPropertyNames () constRetourne les noms de toutes les propri�t�s qui sont ajout�es dynamiquement � l'objet en utilisant setProperty(). Cette fonction a �t� introduite dans Qt 4.2. bool QObject::event ( QEvent * e ) [virtual]Cette fonction virtuelle re�oit des �v�nements de l'objet et doit retourner true si l'�v�nement e a �t� reconnu et trait�. La fonction event() peut �tre r�impl�ment�e pour personnaliser le comportement d'un objet. Voir aussi installEventFilter(), timerEvent(), QApplication::sendEvent(), QApplication::postEvent() et QWidget::event(). bool QObject::eventFilter ( QObject * watched, QEvent * event ) [virtual]Filtre les �v�nements si cet objet a �t� install� comme filtre d'�v�nements pour l'objet watched. Dans la r�impl�mentation de cette fonction, si vous voulez filtrer et rejeter l'�v�nement event, c'est-�-dire faire en sorte qu'il ne soit plus trait�, retournez true ; sinon, retournez false. Exemple : class MainWindow : public QMainWindow { public: MainWindow(); protected: bool eventFilter(QObject *obj, QEvent *ev); private: QTextEdit *textEdit; }; MainWindow::MainWindow() { textEdit = new QTextEdit; setCentralWidget(textEdit); textEdit->installEventFilter(this); } bool MainWindow::eventFilter(QObject *obj, QEvent *event) { if (obj == textEdit) { if (event->type() == QEvent::KeyPress) { QKeyEvent *keyEvent = static_cast<QKeyEvent*>(event); qDebug() << "Ate key press" << keyEvent->key(); return true; } else { return false; } } else { //passer l'�v�nement � la classe parent return QMainWindow::eventFilter(obj, event); } } Remarquez dans l'exemple ci-dessus que les �v�nements non manipul�s sont pass�s � la fonction eventFilter() de la classe m�re, puisqu'elle pourrait avoir r�impl�ment� eventFilter() pour son fonctionnement interne. Attention : si vous supprimez l'objet receveur dans cette fonction, assurez-vous de retourner true. Sinon, Qt va renvoyer l'�v�nement � l'objet supprim� et le programme risque de planter. Voir aussi installEventFilter(). T QObject::findChild ( const QString & name = QString() ) constRetourne l'enfant de cet objet qui peut �tre cast� en T et qui est appel� name ou 0 s'il n'y a pas de tel objet. Omettre l'argument name fait que tous les noms d'objets correspondent. La recherche est effectu�e d'une mani�re r�cursive. S'il y a plus d'un enfant correspondant � la recherche, l'anc�tre le plus direct est retourn�. S'il y a plusieurs anc�tres aussi directs les uns que les autres, il n'est pas possible de d�terminer lequel sera retourn�. Dans ce cas, findChildren() devrait �tre utilis�e. Cet exemple retourne un enfant QPushButton du widget parent parentWidget nomm� « button1 » : QPushButton *button = parentWidget->findChild<QPushButton *>("button1"); Cet exemple retourne un enfant QListWidget du widget parent parentWidget : QListWidget *list = parentWidget->findChild<QListWidget *>(); Attention : cette fonction n'est pas disponible dans MSVC 6. Utilisez qFindChild() si vous devez supporter cette version du compilateur. Voir aussi findChildren() et qFindChild(). QList<T> QObject::findChildren ( const QString & name = QString() ) constRetourne tous les enfants de cet objet avec le nom name donn� et qui peuvent �tre cast�s en T ou une liste vide s'il n'y a pas de tel objet. Omettre l'argument name fait que tous les noms d'objets correspondent. La recherche est effectu�e d'une mani�re r�cursive. L'exemple suivant montre la mani�re de trouver une liste d'enfants de type QWidget du widget parent parentWidget nomm�s widgetname : QList<QWidget *> widgets = parentWidget.findChildren<QWidget *>("widgetname"); Cet exemple retourne tous les QPushButton enfants du widget parent parentWidget : QList<QPushButton *> allPButtons = parentWidget.findChildren<QPushButton *>(); Attention : cette fonction n'est pas disponible sur MSVC 6. Utilisez qFindChildren() si vous devez supporter cette version du compilateur. Voir aussi findChild() and qFindChildren(). QList<T> QObject::findChildren ( const QRegExp & regExp ) constCette fonction surcharge findChildren(). Retourne les enfants de cet objet qui peuvent �tre cast�s en T et qui ont des noms qui correspondent � l'expression r�guli�re regExp ou une liste vide s'il n'y a pas de tel objet. La recherche est effectu�e d'une mani�re r�cursive. Attention : cette fonction n'est pas disponible avec MSVC 6. Utilisez qFindChildren() si vous devez supporter cette version du compilateur. bool QObject::inherits ( const char * className ) constRetourne true si cet objet est une instance d'une classe qui h�rite de className ou une sous-classe de QObject qui h�rite de className ; retourne false sinon. On consid�re qu'une classe h�rite d'elle m�me. Exemple : QTimer *timer = new QTimer; // QTimer h�rite de QObject timer->inherits("QTimer"); // retourne true timer->inherits("QObject"); // retourne true timer->inherits("QAbstractButton"); // retourne false // QVBoxLayout hin�rite de QObject et QLayoutItem QVBoxLayout *layout = new QVBoxLayout; layout->inherits("QObject"); // retourne true layout->inherits("QLayoutItem"); // retourne true (m�me si QLayoutItem n'est pas un QObject Si vous avez besoin de d�terminer si un objet est une instance d'une classe particuli�re dans le but de la caster, pensez � utiliser qobject_cast<Type *>(object) � la place. Voir aussi metaObject() et qobject_cast(). void QObject::installEventFilter ( QObject * filterObj )Installe un filtre d'�v�nement filterObj sur cet objet. Par exemple : monitoredObj->installEventFilter(filterObj); Un filtre d'�v�nement est un objet qui re�oit tous les �v�nements envoy�s � l'objet. Le filtre peut soit les arr�ter soit les passer � cet objet. Le filtre d'�v�nements filterObj re�oit les �v�nements via sa fonction eventFilter(). La fonction eventFilter() doit retourner true si l'�v�nement devrait �tre filtr� (c'est-�-dire arr�t�) ; sinon, elle doit retourner false. Si de multiples filtres d'�v�nements sont install�s sur un seul objet, le filtre install� en dernier est activ� en premier. Voici une classe KeyPressEater qui d�vore les appuis sur les touches du clavier des objets sur lesquels elle est enclench�e : class KeyPressEater : public QObject { Q_OBJECT ... protected: bool eventFilter(QObject *obj, QEvent *event); }; bool KeyPressEater::eventFilter(QObject *obj, QEvent *event) { if (event->type() == QEvent::KeyPress) { QKeyEvent *keyEvent = static_cast<QKeyEvent *>(event); qDebug("Ate key press %d", keyEvent->key()); return true; } else { // processus standard de l'�v�nement return QObject::eventFilter(obj, event); } } Et voici la mani�re de l'installer sur deux widgets : KeyPressEater *keyPressEater = new KeyPressEater(this); QPushButton *pushButton = new QPushButton(this); QListView *listView = new QListView(this); pushButton->installEventFilter(keyPressEater); listView->installEventFilter(keyPressEater); La classe QShortcut, par exemple, utilise cette technique pour intercepter les appuis sur les touches de raccourci. Attention : si vous supprimez l'objet receveur dans votre fonction eventFilter(), soyez bien s�r de renvoyer true. Si vous retournez false, Qt enverra l'�v�nement � l'objet supprim� et le programme plantera. Notez que l'objet filtrant doit �tre dans le m�me thread que cet objet. Si filterObj est dans un autre thread, cette fonction ne fait rien. Si filterObj ou cet objet sont d�plac�s dans un autre thread apr�s l'appel de cette fonction, le filtre d'�v�nements ne sera pas appel� avant que les deux objets aient la m�me affinit� � nouveau (il n'est pas supprim�). Voir aussi removeEventFilter(), eventFilter() et event(). bool QObject::isWidgetType () constRetourne true si l'objet est un widget ; sinon retourne false. Appeler cette fonction revient � appeler inherits("QWidget"), sauf qu'elle est beaucoup plus rapide. void QObject::killTimer ( int id )Tue la minuterie avec l'identifiant id. L'identifiant de minuterie est retourn� par startTimer() quand un �v�nement de minuterie est lanc�. Voir aussi timerEvent() et startTimer(). const QMetaObject * QObject::metaObject () const [virtual]Retourne un pointeur sur le m�ta-objet de cet objet. Un m�ta-objet contient des informations sur une classe qui h�rite de QObject, comme le nom de classe, le nom de la superclasse, les propri�t�s, les signaux et les slots. Tout d�riv� de QObject qui contient la macro Q_OBJECT poss�dera un m�ta-objet. Les informations du m�ta-objet sont requises par le m�canisme de connexion des signaux et slots, ainsi que par le syst�me de propri�t�s. La fonction inherits() l'utilise aussi. Si n'avez pas de pointeur sur une instance d'un objet r�el mais voulez toujours acc�der au m�ta-objet d'une classe, vous pouvez utiliser staticMetaObject. Exemple : QObject *obj = new QPushButton; obj->metaObject()->className(); // retourne "QPushButton" QPushButton::staticMetaObject.className(); // retourne "QPushButton" Voir aussi staticMetaObject. void QObject::moveToThread ( QThread * targetThread )Change l'affinit� du thread pour cet objet et ses enfants. L'objet ne peut pas �tre boug� s'il a un parent. Le traitement des �v�nements continuera dans le thread targetThread. Pour d�placer un objet dans le thread principal, utilisez QApplication::instance() pour r�cup�rer un pointeur sur l'application courante et utilisez ensuite QApplication::thread() pour r�cup�rer le thread dans lequel vit l'application. Par exemple : myObject->moveToThread(QApplication::instance()->thread()); Si le thread targetThread vaut z�ro, tout le traitement des �v�nements pour cet objet et ses enfants s'arr�te. Notez que toutes les minuteries en action pour l'objet seront remises � z�ro. Elles sont d'abord arr�t�es dans le thread courant puis red�marr�es (avec le m�me intervalle) dans le thread targetThread. Au final, si on d�place sans cesse un objet entre des threads, les minuteries peuvent �tre postpos�es ind�finiment. Un �v�nement QEvent::ThreadChange est envoy� � l'objet juste avant que l'affinit� du thread ne change. Vous pouvez manipuler cet �v�nement pour effectuer n'importe quel traitement particulier. Notez que n'importe quel nouvel �v�nement post� sur cet objet sera trait� dans le thread targetThread. Attention : cette fonction n'est pas thread-safe ; le thread actuel doit �tre le m�me que l'affinit� du thread actuel. En d'autres mots, cette fonction ne peut que « pousser » un objet du thread actuel vers un autre, elle ne peut pas en « tirer » un d'un thread arbitraire � l'actuel. Voir aussi thread(). QObject * QObject::parent () constRetourne un pointeur vers l'objet parent. Voir aussi setParent() et children(). QVariant QObject::property ( const char * name ) constRetourne la valeur de la propri�t� ayant pour nom name de l'objet. S'il n'y a pas de propri�t� de ce nom, la variable retourn�e est invalide. Les informations sur toutes les propri�t�s disponibles sont donn�es par les fonctions metaObject() et dynamicPropertyNames(). Voir aussi setProperty(), QVariant::isValid(), metaObject() et dynamicPropertyNames(). int QObject::receivers ( const char * signal ) const [protected]Retourne le nombre de receveurs connect�s au signal. Du fait que les signaux, comme les slots, peuvent �tre utilis�s comme receveurs de signaux et que la m�me connexion peut �tre �tablie plusieurs fois, le nombre de receveurs est le m�me que le nombre de connections �tablies avec ce signal. Quand vous appelez cette fonction, vous pouvez utiliser la macro SIGNAL() pour passer un signal sp�cifique : if (receivers(SIGNAL(valueChanged(QByteArray))) > 0) { QByteArray data; get_the_value(&data); // op�rations ch�re en temps de calcul emit valueChanged(data); } Comme le code ci-dessus l'illustre, vous pouvez utiliser cette fonction pour �viter d'�mettre un signal si rien n'y est connect�. Attention : cette fonction viole le principe orient� objet de modularit�. Cependant, elle peut-�tre utile quand vous avez besoin de r�aliser une initialisation complexe uniquement si quelque chose est connect� � un signal. void QObject::removeEventFilter ( QObject * obj )Supprime un objet de filtre �v�nementiel obj de cet objet. La demande est ignor�e si un tel filtre �v�nementiel n'a pas �t� install�. Tous les filtres �v�nementiels pour cet objet sont automatiquement supprim�s quand cet objet est d�truit. Il est toujours s�r de supprimer un filtre �v�nementiel, m�me pendant son activation (c'est-�-dire depuis la fonction eventFilter()). Voir aussi installEventFilter(), eventFilter() et event(). QObject * QObject::sender () const [protected]Retourne un pointeur sur l'objet qui a envoy� le signal, si elle est appel�e dans un slot activ� par un signal ; retourne 0 sinon. Le pointeur est valide uniquement pendant l'ex�cution du slot qui appelle cette fonction depuis le contexte du thread de cet objet . Le pointeur retourn� par cette fonction devient invalide si l'objet envoyant le signal est d�truit ou si le slot est d�connect� du signal de l'objet envoyant. Attention : cette fonction viole le principe orient� objet de modularit�. Cependant, il peut-�tre utile d'avoir acc�s � l'objet envoyant le signal quand beaucoup de signaux sont connect�s au m�me slot. Attention : comme d�crit plus haut, la valeur de retour de cette fonction n'est pas valide quand le slot est appel� via une Qt::DirectConnection depuis un thread diff�rent de celui de cet objet. N'utilisez pas cette fonction dans ce cas de figure. Voir aussi QSignalMapper. void QObject::setParent ( QObject * parent )Fait de l'objet un enfant de parent. Voir aussi parent() et QWidget::setParent(). bool QObject::setProperty ( const char * name, const QVariant & value )Fait en sorte que la propri�t� name de l'objet prenne la valeur value. Si la propri�t� est d�finie dans la classe en utilisant Q_PROPERTY, la fonction retourne true en cas de succ�s et false en cas d'�chec. Si la propri�t� n'est pas d�finie par Q_PROPERTY et, par cons�quent, n'est pas list�e dans le m�ta-objet, elle est ajout�e en tant que propri�t� dynamique et la fonction retourne false. Des informations sur les propri�t�s disponibles peuvent �tre obtenues par le metaObject() et la fonction dynamicPropertyNames(). Des propri�t�s dynamiques peuvent aussi �tre demand�es par le biais de property() et supprim�es en leur associant une valeur invalide de QVariant. Changer la valeur d'une propri�t� dynamique provoque l'envoi d'un �v�nement QDynamicPropertyChangeEvent � l'objet. Note : les propri�t�s dynamiques pr�fix�es par « _q_ » sont r�serv�es � des fins internes. Voir aussi property(), metaObject() et dynamicPropertyNames(). bool QObject::signalsBlocked () constRetourne true si les signaux sont bloqu�s ; retourne sinon false. Les signaux ne sont pas bloqu�s par d�faut. Voir aussi blockSignals(). int QObject::startTimer ( int interval )D�marre une minuterie et retourne un identifiant de minuterie ou 0 s'il est impossible d'en d�marrer une. Un �v�nement de minuterie va se produire � chaque intervalle de interval millisecondes jusqu'� ce que killTimer() soit appel�e. Si interval vaut 0, alors l'�v�nement de minuterie se produit une fois � chaque fois qu'il n'y a plus d'�v�nements du syst�me de fen�trage � traiter. La fonction virtuelle timerEvent() est appel�e avec la classe de param�tres d'�v�nements QTimerEvent quand un �v�nement de minuterie se produit. R�impl�mentez cette fonction pour r�cup�rer les �v�nements de minuterie. Si plusieurs minuteries sont en cours d'ex�cution, la fonction QTimerEvent::timerId() peut �tre utilis�e pour trouver quelle minuterie a �t� activ�e. Exemple : class MyObject : public QObject { Q_OBJECT public: MyObject(QObject *parent = 0); protected: void timerEvent(QTimerEvent *event); }; MyObject::MyObject(QObject *parent) : QObject(parent) { startTimer(50); // minuterie de 50 milliseconde startTimer(1000); // minuterie d'une seconde startTimer(60000); // minuterie d'une minute } void MyObject::timerEvent(QTimerEvent *event) { qDebug() << "Timer ID:" << event->timerId(); } Notez que la pr�cision d'un QTimer d�pend du syst�me d'exploitation et du mat�riel sous-jacent. La plupart des plateformes supportent une pr�cision de 20 millisecondes ; d'autres en permettent une meilleure. Si Qt est incapable de d�livrer le nombre demand� d'�v�nements de minuterie, il se d�barrassera silencieusement de certains. La classe QTimer fournit une interface de programmation de haut niveau avec des minuteries � coup unique et des signaux au lieu d'�v�nements. Il y a aussi une classe QBasicTimer, plus l�g�re que QTimer mais moins facilement maniable que les identifiants de minuterie. Voir aussi timerEvent(), killTimer() et QTimer::singleShot(). QThread * QObject::thread () constRetourne le thread dans lequel l'objet vit. Voir aussi moveToThread(). void QObject::timerEvent ( QTimerEvent * event ) [virtual protected]Ce gestionnaire �v�nementiel peut �tre r�impl�ment� dans une sous-classe pour recevoir des �v�nements de minuterie pour l'objet. QTimer fournit une interface de haut niveau pour des fonctionnalit� de minuterie et �galement des informations plus g�n�rales sur les minuteries. L'�v�nement de minuterie est pass� dans le param�tre event. Voir aussi startTimer(), killTimer() et event(). QString QObject::tr ( const char * sourceText, const char * disambiguation = 0, int n = -1 ) [static]Retourne une version traduite de sourceText, �ventuellement bas�e sur une cha�ne de caract�res disambiguation et la valeur de n pour les cha�nes contenant des pluriels, sinon retourne sourceText si aucune traduction n'est disponible. Exemple : void MainWindow::createMenus() { fileMenu = menuBar()->addMenu(tr("&File")); ... Si le m�me sourceText est utilis� dans diff�rents r�les selon le m�me contexte, un identifiant suppl�mentaires sous la forme d'une cha�ne de caract�res peut �tre pass�e dans disambiguation (0 par d�faut). Dans Qt 4.4 et avant, cela �tait la meilleure mani�re de transmettre des commentaires aux traducteurs. Exemple: MyWindow::MyWindow() { QLabel *senderLabel = new QLabel(tr("Name:")); QLabel *recipientLabel = new QLabel(tr("Name:", "recipient")); ... Voir �crire son code source pour la traduction pour une description d�taill�e du m�canisme de traduction de Qt en g�n�ral et la section D�sambigu�sation pour des informations sur l'homonymie. Attention : cette m�thode est r�entrante seulement si tous les traducteurs sont install�s avant de l'appeler. L'installation ou la suppression de traducteurs tout en effectuant des traductions n'est pas support�. Agir ainsi pourrait faire planter l'application ou donner d'autres comportements ind�sirables. Voir aussi trUtf8(), QApplication::translate(), QTextCodec::setCodecForTr() et Internationalization with Qt. QString QObject::trUtf8 ( const char * sourceText, const char * disambiguation = 0, int n = -1 ) [static]Retourne une version traduite de sourceText ou QString::fromUtf8(sourceText) s'il n'y a pas de traduction appropri�e. Sinon, elle fonctionne de la m�me mani�re que tr(sourceText, disambiguation, n). Notez que l'utilisation des variantes UTF-8 des fonctions de traduction ne sont pas requises si CODECFORTR est d�j� r�gl� sur UTF-8 dans le fichier de projet qmake et que QTextCodec::setCodecForTr(« UTF-8 ») est utilis�. Attention : cette m�thode n'est r�entrante que si tous les traducteurs sont install�s avant son appel. Installer ou enlever des traducteurs pendant la traduction n'est pas support�. Agir ainsi pourrait donner un crash ou d'autres comportements ind�sirables. Attention : pour des raisons de portabilit�, nous recommandons l'�chappement des s�quences de caract�res non ASCII dans les cha�nes litt�rales pass�es � trUtf8(). Par exemple : label->setText(tr("F\374r \310lise")); Voir aussi tr(), QApplication::translate() et L'internationalisation avec Qt. Documentation de la variable membreconst QMetaObject QObject::staticMetaObjectCette variable stocke le m�ta-objet de cette classe. Un m�ta-objet contient des informations sur une classe qui h�rite deQObject, par exemple le nom de la classe, le nom de la super-classe, les propri�t�s, les signaux et les slots. Chaque classe qui contient la macro Q_OBJECT poss�dera �galement un m�ta-objet. Les informations du m�ta-objet sont n�cessaires au m�canisme de connexion signal/slot et au syst�me de propri�t�s. La fonction [qobject#inherits|inherits()]] se sert �galement des m�ta-objets. Si vous avez un pointeur sur un objet, vous pouvez utiliser la fonction metaObject() pour r�cup�rer le m�ta-objet associ� � cet objet. Exemple : QPushButton::staticMetaObject.className(); QObject *obj = new QPushButton; obj->metaObject()->className(); Voir aussi metaObject(). En relation mais non membres de la classetypedef QObjectListT qFindChild ( const QObject * obj, const QString & name )Cette fonction est �quivalente � obj->findChild<T>(name). Elle est fournie comme contournement d'un probl�me de MSVC6 : il ne supporte pas les fonctions template membres. Voir aussi QObject::findChild(). QList<T> qFindChildren ( const QObject * obj, const QString & name )Cette fonction est �quivalente � obj->findChildren<T>(name). Elle est fournie comme contournement d'un probl�me de MSVC6 : il ne supporte pas les fonctions template membres. Voir aussi QObject::findChildren(). QList<T> qFindChildren ( const QObject * obj, const QRegExp & regExp )Cette fonction surchage qFindChildren(). Cette fonction est �quivalente � obj->findChildren<T>(regExp). Elle est fournie comme contournement d'un probl�me de MSVC6 : il ne supporte pas les fonctions template membres. T qobject_cast ( QObject * object )Retourne l'objet object donn� cast� dans le type T si l'objet est du type T (ou d'une sous-classe); sinon retourne 0. Si object vaut 0 alors elle retournera 0 �galement. La classe T doit h�riter (directement ou indirectement) de QObject et �tre d�clar�e avec la macro Q_OBJECT. On consid�re qu'une classe h�rite d'elle-m�me. Exemple: QObject *obj = new QTimer; // QTime h�rite de QObject QTimer *timer = qobject_cast<QTimer *>(obj); // timer == (QObject *)obj QAbstractButton *button = qobject_cast<QAbstractButton *>(obj); // button == 0 La fonction qobject_cast() se comporte de fa�on semblable � la fonction standard en C++ dynamic_cast(), avec pour avantages le fait qu'elle ne n�cessite pas un support du RTTI et qu'elle fonctionne au-del� des fronti�res dynamiques de la biblioth�que. qobject_cast() peut �galement �tre utilis� conjointement avec des interfaces ; voir l'exemple Plug & Paint pour plus de d�tails. Attention : Si T n'est pas d�clar� avec la macro Q_OBJECT, la valeur de retour de cette fonction est ind�finie. Voir aussi QObject::inherits(). Documentation des macrosQ_CLASSINFO ( Name, Value )Cette macro associe des informations suppl�mentaires � la classe, disponibles avec QObject::metaObject(). � l'exception de l'extension ActiveQt, Qt n'utilise pas ces informations. Ces informations suppl�mentaires prennent la forme d'une cha�ne de caract�res Name et d'une cha�ne de caract�res litt�rale Value. Exemple : class MyClass : public QObject { Q_OBJECT Q_CLASSINFO("Author", "Pierre Gendron") Q_CLASSINFO("URL", "http://www.my-organization.qc.ca") public: ... }; Voir aussi QMetaObject::classInfo(). Q_DISABLE_COPY ( Class )D�sactive l'utilisation des constructeurs de copie et des op�rateurs d'assignation pour la classe Class. Les instances des d�riv�s de QObject ne devraient pas �tre vues comme des valeurs qui peuvent �tre copi�es ou assign�es mais bien comme des identit�s uniques. Ceci signifie que, quand vous cr�ez vos d�riv�s de QObject (directement ou non), vous ne devriez pas lui donner un constructeur par copie ou un op�rateur d'assignation. Cependant, il devrait �tre suffisant de simplement les omettre de votre classe parce que, si vous �crivez par erreur du code qui requiert un constructeur par copie ou un op�rateur d'assignation (c'est facile � faire), votre compilateur va, plein de bonnes intentions, en cr�er un pour vous. Vous devez en faire plus. L'utilisateur curieux va remarquer que les classes de Qt d�rivant de QObject incluent d'habitude cette macro dans une section priv�e : class MyClass : public QObject { private: Q_DISABLE_COPY(MyClass) }; Elle d�clare un constructeur par copie et un op�rateur d'assignation dans la section priv�e : si vous les utilisez par erreur, le compilateur va vous renvoyer une erreur. class MyClass : public QObject { private: MyClass(const MyClass &); MyClass &operator=(const MyClass &); }; Cependant, ceci ne peut pas r�soudre tous les cas. Vous pourriez �tre tent� d'�crire quelque chose du genre : QWidget w = QWidget(); Tout d'abord, ne le faites pas. La majorit� des compilateurs va g�n�rer du code qui utilise le constructeur par copie et l'erreur de violation de private va �tre lanc�e mais votre compilateur C++ n'est pas oblig� de g�n�rer du code pour cette ligne d'une mani�re sp�cifique. Il pourrait g�n�rer du code qui n'utilise ni le constructeur par copie, ni l'op�rateur d'assignation que nous avons rendu priv�. Dans ce cas, aucune erreur ne sera rapport�e mais votre application plantera probablement quand vous appellerez une fonction membre de w. Q_EMITUtilisez cette macro pour remplacer le mot-cl� emit pour �mettre des signaux quand vous souhaitez utiliser les signaux et slots de Qt avec un m�canisme tiers de signaux et slots. Cette macro est normalement utilis�e quand no_keywords est sp�cifi� dans la variable CONFIG du fichier .pro mais elle peut �tre aussi utilis�e quand no_keywords n'est pas sp�cifi�e. Q_ENUMS ( ... )Cette macro enregistre un ou plusieurs types d'�num�rations dans le syst�me de m�ta-objets. Par exemple : class MyClass : public QObject { Q_OBJECT Q_ENUMS(Priority) public: MyClass(QObject *parent = 0); ~MyClass(); enum Priority { High, Low, VeryHigh, VeryLow }; void setPriority(Priority priority); Priority priority() const; }; Si vous voulez enregistrer une �num�ration d�clar�e dans une autre classe, l'�num�ration doit �tre pleinement qualifi�e avec le nom de la classe la d�finissant. En plus, la classe d�finissant l'�num�ration doit h�riter de QObject et d�clarer l'�num�ration avec Q_ENUMS(). Voir aussi Le syst�me de propri�t�s de Qt. Q_FLAGS ( ... )Cette macro enregistre un ou plusieurs types de drapeaux (//flag//) dans le syst�me de m�ta-objets. Elle est d'habitude utilis�e dans la d�finition d'une classe pour d�clarer quelles valeurs d'une �num�ration donn�e peuvent �tre utilis�es comme drapeaux et combin�es avec l'op�rateur OU. Par exemple, dans QLibrary, le drapeau LoadHints est d�clar� de cette mani�re : class QLibrary : public QObject { ... Q_FLAGS(LoadHint LoadHints) ... La d�claration des drapeaux eux-m�mes est effectu�e dans la section publique de la classe QLibrary, avec la macro Q_DECLARE_FLAGS() : ... public: enum LoadHint { ResolveAllSymbolsHint = 0x01, ExportExternalSymbolsHint = 0x02, LoadArchiveMemberHint = 0x04 }; Q_DECLARE_FLAGS(LoadHints, LoadHint) ... Note : cette macro prend soin d'enregistrer des valeurs de drapeaux individuelles dans le syst�me de m�ta-objets, il n'est donc pas utile d'utiliser Q_ENUMS() en plus de cette macro. Voir aussi Le syst�me de propri�t�s de Qt. Q_INTERFACES ( ... )Cette macro dit � Qt quelles interfaces la classe impl�mente. Ceci est utilis� lors de l'impl�mentation de plug-ins. Exemple : class BasicToolsPlugin : public QObject, public BrushInterface, public ShapeInterface, public FilterInterface { Q_OBJECT Q_INTERFACES(BrushInterface ShapeInterface FilterInterface) public: ... }; Voir l'exemple Plug & Paint Basic Tools pour plus de d�tails. Voir aussi Q_DECLARE_INTERFACE(), Q_EXPORT_PLUGIN2() et Comment cr�er des plug-ins Qt. Q_INVOKABLEAppliquez cette macro aux d�finitions des fonctions membres pour qu'elles soient invocables par le syst�me de m�ta-objets. La macro est �crite avant le type de retour, comme dans l'exemple suivant : class Window : public QWidget { Q_OBJECT public: Window(); void normalMethod(); Q_INVOKABLE void invokableMethod(); }; La fonction invokableMethod() est marqu�e en utilisant Q_INVOKABLE, ce qui fait qu'elle est enregistr�e dans le syst�me de m�ta-objets et qu'elle est invocable par QMetaObject::invokeMethod(). Puisque la fonction normalMethod() n'est pas enregistr�e de cette mani�re, elle n'est pas invocable par QMetaObject::invokeMethod(). Q_OBJECTLa macro Q_OBJECT doit appara�tre dans la section priv�e de la d�finition d'une classe qui d�clare ses propres signaux et slots et/ou qui utilise d'autres services fournis par le syst�me de m�ta-objets de Qt. Par exemple : #include <QObject> class Counter : public QObject { Q_OBJECT public: Counter() { m_value = 0; } int value() const { return m_value; } public slots: void setValeur(int value); signals: void valueChanged(int newValeur); private: int m_value; }; Note : cette macro requiert que la classe soit un d�riv� de QObject. Utilisez Q_GADGET au lieu deQ_OBJECT pour activer le support du syst�me de m�ta-objets pour les �num�rations dans une classe qui ne d�rive pas de QObject. Q_GADGET rend un membre de la classe disponible, staticMetaObject, du type QMetaObject et qui fournit un acc�s aux �num�rations d�clar�es avec Q_ENUMS. Q_GADGET n'est disponible que pour le C++. Voir aussi Le syst�me de m�ta-objet, Les signaux et les slots et Le syst�me de propri�t�s de Qt. Q_PROPERTY ( ... )Cette macro est utilis�e pour d�clarer des propri�t�s dans les classes qui h�ritent de QObject. Les propri�t�s se comportent comme des donn�es membres de la classe, � l'exception du fait qu'elles poss�dent des fonctionnalit�s additionnelles gr�ce au syst�me de m�ta-objets. Q_PROPERTY(type name READ getFunction [WRITE setFunction] [RESET resetFunction] [NOTIFY notifySignal] [DESIGNABLE bool] [SCRIPTABLE bool] [STORED bool] [USER bool] [CONSTANT] [FINAL]) Le nom de la propri�t� et son type et la fonction READ sont requis. Le type peut �tre n'importe quel type support� par QVariant ou un type d�fini par l'utilisateur. Les autres options sont optionnelles, m�me si une fonction WRITE est habituellement d�clar�e. Les attributs sont d�finis par d�faut � true, � l'exception de USER � false. Par exemple : Q_PROPERTY(QString title READ title WRITE setTitle USER true) Pour plus de d�tails sur la mani�re d'utiliser cette macro et un exemple plus d�taill� de son utilisation, regardez le syst�me de propri�t�s de Qt. Voir aussi Le syst�me de propri�t�s de Qt. Q_SIGNALC'est une macro additionnelle qui vous permet de marquer une seule fonction comme un slot. Elle peut �tre assez utile, sp�cialement quand vous utilisez un parseur de code source tiers qui ne comprend pas les groupes signals ou Q_SIGNALS. Utilisez cette macro pour remplacer le mot-cl� signal dans les d�clarations de classes quand vous souhaitez utiliser les signaux et slots de Qt avec un m�canisme tiers de signaux et slots. Cette macro est normalement utilis�e quand no_keywords est sp�cifi� dans la variable CONFIG du fichier .pro mais elle peut �tre aussi utilis�e quand no_keywords n'est pas sp�cifi�e. Q_SIGNALSUtilisez cette macro pour remplacer le mot-cl� signals dans les d�clarations de classes quand vous souhaitez utiliser les signaux et slots de Qt avec un m�canisme tiers de signaux et slots. Cette macro est normalement utilis�e quand no_keywords est sp�cifi� dans la variable CONFIG du fichier .pro mais elle peut �tre aussi utilis�e quand no_keywords n'est pas sp�cifi�e. Q_SLOTC'est une macro additionnelle qui vous permet de marquer une seule fonction comme un slot. Elle peut �tre assez utile, sp�cialement quand vous utilisez un parseur de code source tiers qui ne comprend pas les groupes slots ou Q_SLOTS. Utilisez cette macro pour remplacer le mot-cl� slot dans les d�clarations de classes quand vous souhaitez utiliser les signaux et slots de Qt avec un m�canisme tiers de signaux et slots. Cette macro est normalement utilis�e quand no_keywords est sp�cifi� dans la variable CONFIG du fichier .pro mais elle peut �tre aussi utilis�e quand no_keywords n'est pas sp�cifi�e. Q_SLOTSUtilisez cette macro pour remplacer le mot-cl� slots dans les d�clarations de classes quand vous souhaitez utiliser les signaux et slots de Qt avec un m�canisme tiers de signaux et slots. Cette macro est normalement utilis�e quand no_keywords est sp�cifi� dans la variable CONFIG du fichier .pro mais elle peut �tre aussi utilis�e quand no_keywords n'est pas sp�cifi�e. RemerciementsMerci � Abdelhafid Hafidi et Nicolas Carion pour la traduction, � Thibaut Cuvelier pour la traduction et la relecture ainsi qu'� Jonathan Courtois et Jacques Thery pour la relecture ! |
Publicit�
Best OfActualit�s les plus luesSemaine
Mois
Ann�e
![]()
![]() Le blog Digia au hasard![]() Cr�er des applications avec un style Metro avec Qt, exemples en QML et C++, un article de Digia Qt traduit par Thibaut CuvelierLe blog Digia est l'endroit privil�gi� pour la communication sur l'�dition commerciale de Qt, o� des r�ponses publiques sont apport�es aux questions les plus pos�es au support. Lire l'article.
Communaut�Ressources
Liens utilesContact
Qt dans le magazine |
Cette page est une traduction d'une page de la documentation de Qt, �crite par Nokia Corporation and/or its subsidiary(-ies). Les �ventuels probl�mes r�sultant d'une mauvaise traduction ne sont pas imputables � Nokia. | Qt 4.7 | |
Copyright © 2012 Developpez LLC. Tous droits r�serv�s Developpez LLC. Aucune reproduction, m�me partielle, ne peut �tre faite de ce site et de l'ensemble de son contenu : textes, documents et images sans l'autorisation expresse de Developpez LLC. Sinon, vous encourez selon la loi jusqu'� 3 ans de prison et jusqu'� 300 000 E de dommages et int�r�ts. Cette page est d�pos�e � la SACD. | ||
Vous avez d�nich� une erreur ? Un bug ? Une redirection cass�e ? Ou tout autre probl�me, quel qu'il soit ? Ou bien vous d�sirez participer � ce projet de traduction ? N'h�sitez pas � nous contacter ou par MP ! |
Copyright © 2000-2012 - www.developpez.com