4 Stimmen

Warum können die vom Designer generierten UI-Klassen, die als "Aggregation" eingebettet sind, keine benutzerdefinierten Slots implementieren?

Ich sehe, dass die vom Designer generierten UI-Klassen mit einer der folgenden Methoden in Qt eingebettet werden können,

  1. Aggregation als Zeigermitglied
  2. Aggregation
  3. Mehrfache, private Vererbung

enter image description here

aber es wird gesagt, dass die zweite Methode keine benutzerdefinierten Steckplätze unterstützt. Kann jemand dies näher erläutern? Warum können wir keine benutzerdefinierten Slots implementieren, während wir die Aggregation verwenden?

Erläutern Sie auch die Vor- und Nachteile der einzelnen Methoden.

0 Stimmen

Aggregat ist die Zusammensetzung. Sie haben also grundsätzlich die Optionen "point-to" (PIMPL), "has-a" (zusammengesetzt) oder "is-a" (Vererbung).

3voto

RyanCu Punkte 401

Ich glaube nicht, dass es stimmt, dass die zweite Option keine benutzerdefinierten Steckplätze unterstützt.

Die Auswahl wird in der offiziellen Qt-Dokumentation erläutert. Siehe http://doc.qt.io/qt-4.8/designer-using-a-ui-file.html#compile-time-form-processing

Beachten Sie jedoch, dass die drei in diesem Dokument vorgestellten Ansätze nicht mit den drei Optionen in Qt Creator übereinstimmen. Der erste im Dokument vorgestellte Ansatz, der direkte Ansatz, gehört nicht zu den drei hier vorgestellten Möglichkeiten - dieser Ansatz ist nicht über die Qt Creator-Funktion verfügbar, die durch diese Einstellung gesteuert wird. Die zweite Option (Aggregation oder "Einzelvererbungsansatz") ist in zwei Varianten verfügbar, wobei der geringfügige Unterschied darin besteht, ob das ui-Klassenmitglied ein Datenmitglied (zweite Option) oder ein Zeigermitglied (erste Option) ist.

Ich bevorzuge die dritte Option, die Mehrfachvererbung. Dies ist auch der Weg, der überall verwendet wird C++ GUI-Programmierung mit Qt 4 (Erstausgabe kostenlos online verfügbar ), die diesen Ansatz als den saubersten bezeichnet. Wenn ich meine Klasse schreibe, denke ich nicht wirklich an zwei Objekte, eines mit der Benutzeroberfläche und das andere mit der Funktionalität, ich denke an nur eines, und Mehrfachvererbung passt am besten dazu. Aber das Dokument gibt die Gründe an, warum "Aggregation als Zeigerelement" der Standard ist.

0voto

Pato Sandaña Punkte 382

Ein QT5-Update:

Heutzutage können Sie benutzerdefinierte Slots auf verschiedene Arten unterstützen, z. B. durch die Verwendung von Lambda- und normalen Funktionen für Slots (siehe hier) .

Beachten Sie auch, dass die empfohlene Option das Zeiger-Mitglied auch bekannt als das Pimpl-Idiom. Der Vorteil ist, dass die Vorwärtsdeklaration des UI-Objekts schnellere Kompilierungszeiten für größere Projekte ermöglicht und auch gemeinsam genutzte Bibliotheken leicht zu verpacken sind (wie hier angegeben) .

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X