Important: Please read the Qt Code of Conduct - https://forum.qt.io/topic/113070/qt-code-of-conduct

Prototyp einer Qt Klasse



  • So. Ich bin es mal wieder und ich kann mir schon vorstellen, dass ich dafür jetzt auf die Mütze kriege. Aber! Ich habe da ein Problem und komme nicht weiter.

    Es geht um folgendes. Ich habe ein QTextEdit Widget gebaut, wo ich unter Anderem die Mouse und das dropEvent verwende. Das klappt auch hervorragend. Bis auf eine Kleinigkeit.

    In der Header-Datei habe ich einfach mein QTextWidget vor das HauptWindow gesetzt. Also kennt mein HauptWindow diese Klasse und kann sie natürlich verwenden.

    Nun mein Problem:

    Wenn man eine Datei in dem Widget abwirft, prüft dieses erst, ob es ein JPEG ist. Klappt. Nun müsste das Widget aber auf eine Funktion aus dem HauptWindow zugreifen. Ich kann das HauptWindow aber nicht als Parent übergeben, weil ja das QTextWidget vor dem HauptWindow steht und die Klasse des HauptWindow nicht kennt.

    Bei Funktionen wäre das ja simpel. Einfach einen Prototyp vor der Klasse deklarieren, läuft.

    Nur, wie mache ich das mit einer Klasse von Qt? Bzw. Mit der darin befindlichen Funktion?

    Ja, ich weiss. Wenn ich mich mit C++ auskenne, müsste ich das ja wissen und wenn ich es nicht weiss sollte ich erst einmal C++ lernen. Wahrscheinlich bin ich auch kein C++ experte, kann ich auch zugeben. Ich mache das als Hobby und bislang war ich noch nie in der Situation, ein solches Problem lösen zu müssen.

    Ich würde mich also freuen, wenn mir da trotz meiner Unwissenheit jemand weiterhelfen würde.


  • Lifetime Qt Champion

    @Dany said in Prototyp einer Qt Klasse:

    Nur, wie mache ich das mit einer Klasse von Qt?

    Dieses Widget soll nichts von MainWindow wissen - das wäre sonst schlechtes Design (tightly coupled). Stattdessen sollte das Widget einfach ein Signal emitieren welches MainWindow mit einem eigenen Slot verbinden kann um was auch immer zu tun. Auf diese Weise muss das Widget nicht mal wissen, dass es überhaupt ein MainWindow gibt.



  • Danke für die Antwort! Probiere ich aus!



  • Und wieder was gelernt! Vielen Dank, funktioniert hervorragend! Das werde ich noch öfters einsetzen!


Log in to reply