2010-12-29 8 views
1

Ich arbeite zum ersten Mal mit der Qt-Bibliothek. Ich frage mich, ob es eine Möglichkeit gibt, ein Qt-Widget zu unterklassifizieren, so dass Sie alle Nachrichten abfangen können, die an dieses Widget übergeben werden, es ist möglich mit Windows, aber ich weiß nicht, wie es geht, oder ob es mit Qt möglich ist. Gibt es eine Alternative?Qt-Bibliothek, Unterklassierungsfenster zum Abfangen von Nachrichten?

Das betreffende QWidget ist vom Typ Chat und hat den Typ QList. Wie ist es möglich, mit der QWidget-Bibliothek alles abzufangen, was zu einer Liste hinzugefügt wird, bei der es sich um ein Widget handelt?

Danke.

Antwort

1

Hängt davon ab, was Sie mit Nachricht meinen. Wenn du meinst:

1 - Ereignisse, ich glaube, es gibt einen Event-Handler, den Sie überschreiben können, der letztendlich für das Übergeben dieser Ereignisse an die spezifischen Handler-Funktionen verantwortlich ist.

2 - Signale, ich habe es noch nicht ausprobiert, aber es könnte möglich sein qt_metacall außer Kraft zu setzen in einer völlig Nicht-Standard-Weise zu verhalten. Sie müssen einen Weg finden, void ** in etwas Sinnvolles zu verwandeln, und das ist verdammt hart, ohne genau zu wissen, worauf Sie reagieren. Es gibt einen "id" -Parameter, der der MOC-generierten Funktion sagt, was zu tun ist, und der Rest ist switches und reinterpret_casts.

3 - "Nachricht" im objektorientierten Sinn, wo jeder Aufruf einer "Methode" eine "Nachricht" ist. C++ funktioniert nicht so, tut mir leid. Wenn Sie dieses Verhalten wollen, brauchen Sie etwas wie Java oder Objective-C.

+0

Noah, nehmen wir an, ich hatte ein QWidget namens 'chat' und das selbst enthielt ein qwift-Steuerelement, das eine Liste war, wie würde ich jedes Mal abfangen, wenn es der Liste hinzugefügt wird? Oder könnte ich jedes Mal, wenn ein Gegenstand an die Liste angehängt wurde, benachrichtigt werden, damit ich den letzten Gegenstand vorlesen kann? Zu Punkt 3, ich denke, es war nur meine Sprachwahl (gesprochen) - ich habe wirklich darüber gesprochen, etwas in die Mitte einzufügen, damit ich auch die Daten bekomme, wenn es zur qwidget-Liste hinzugefügt wird. – flavour404

+0

@ Flavour404 wäre es nicht möglich, das Listenobjekt einfach zu einem privaten Mitglied Ihres Chat-Widgets zu machen und eine öffentliche Elementfunktion MyAddItemToList (...) hinzuzufügen, die jeder, der ein Element zur Liste hinzufügen möchte, aufrufen muss (anstatt den Listeneintrag direkt hinzuzufügen)? Fügen Sie Ihrer MyAddItemToList-Methode die zusätzliche Logik hinzu, die Sie benötigen. Das sollte ausreichen, es sei denn, jemand verwendet widget-travers-traversal oder andere fragwürdige Methoden, um Elemente hinter dem Rücken zu Ihrer Liste hinzuzufügen ... was sie wahrscheinlich nicht tun sollten. –

+0

Wenn du wirklich QList meinst, dann nein. QList ist kein Widget, es ist ein Container und erzeugt keine Signale (es kann nicht ... Q_OBJECT-Objekte können keine Vorlagen sein). Wenn Sie QListWidget oder QListView dann ja meinen, können Sie sich mit seinem Modell verbinden. Welches Signal wird spezifisch für Ihre Bedürfnisse sein? Siehe: http://doc.qt.nokia.com/4.7/qabstractitemmodel.html –

Verwandte Themen