allemeine Fragen zu C++

Diese Seite verwendet Cookies. Durch die Nutzung unserer Seite erklären Sie sich damit einverstanden, dass wir Cookies setzen. Weitere Informationen

  • allemeine Fragen zu C++

    Schönen guten Tag

    Ich habe bisher nicht viel mit C++ gemacht und wollte dies einmal ändern. Deswegen habe ich mit einem Kollegen (mit selbiger Moitivation) ein klein weinig experimentiert. So haben wir uns mittels des Qt4-Designers Quellcode generieren lassen. Bei deren Interpätation stoßen wir allerdings auf Schwierigkeiten.

    Quellcode

    1. /********************************************************************************
    2. ** Form generated from reading ui file 'test.ui'
    3. **
    4. ** Created: Thu Aug 30 16:17:35 2007
    5. ** by: Qt User Interface Compiler version 4.3.0
    6. **
    7. ** WARNING! All changes made in this file will be lost when recompiling ui file!
    8. ********************************************************************************/
    9. #ifndef UI_TEST_H
    10. #define UI_TEST_H
    11. #include <QtCore/QVariant>
    12. #include <QtGui/QAction>
    13. #include <QtGui/QApplication>
    14. #include <QtGui/QButtonGroup>
    15. #include <QtGui/QMainWindow>
    16. #include <QtGui/QMenuBar>
    17. #include <QtGui/QStatusBar>
    18. #include <QtGui/QWidget>
    19. class Ui_MainWindow
    20. {
    21. public:
    22. QWidget *centralwidget;
    23. QMenuBar *menubar;
    24. QStatusBar *statusbar;
    25. void setupUi(QMainWindow *MainWindow)
    26. {
    27. if (MainWindow->objectName().isEmpty())
    28. MainWindow->setObjectName(QString::fromUtf8("MainWindow"));
    29. QSize size(800, 600);
    30. size = size.expandedTo(MainWindow->minimumSizeHint());
    31. MainWindow->resize(size);
    32. centralwidget = new QWidget(MainWindow);
    33. centralwidget->setObjectName(QString::fromUtf8("centralwidget"));
    34. MainWindow->setCentralWidget(centralwidget);
    35. menubar = new QMenuBar(MainWindow);
    36. menubar->setObjectName(QString::fromUtf8("menubar"));
    37. menubar->setGeometry(QRect(0, 0, 800, 25));
    38. MainWindow->setMenuBar(menubar);
    39. statusbar = new QStatusBar(MainWindow);
    40. statusbar->setObjectName(QString::fromUtf8("statusbar"));
    41. MainWindow->setStatusBar(statusbar);
    42. retranslateUi(MainWindow);
    43. } // setupUi
    44. void retranslateUi(QMainWindow *MainWindow)
    45. {
    46. MainWindow->setWindowTitle(QApplication::translate("MainWindow", "MainWindow", 0, QApplication::UnicodeUTF8));
    47. Q_UNUSED(MainWindow);
    48. } // retranslateUi
    49. };
    50. namespace Ui {
    51. class MainWindow: public Ui_MainWindow {};
    52. } // namespace Ui
    53. #endif // UI_TEST_H
    Alles anzeigen


    Zunächst einmal das Grundlegenste:
    Wann werwendet man ->, wann einen einfachen Punkt und wann ::?

    Quellcode

    1. MainWindow->objectName().isEmpty()

    Quellcode

    1. QMetaObject::connectSlotsByName(MainWindow);


    Was wird in diesem Quelltextausschnitt gemacht:

    Quellcode

    1. namespace Ui {
    2. class MainWindow: public Ui_MainWindow {};
    3. } // namespace Ui


    Und eine Qt spezifische Frage:
    Wie ist das Handling mit der Fenstergröße zu verstehen:

    Quellcode

    1. QSize size(800, 600);
    2. size = size.expandedTo(MainWindow->minimumSizeHint());
    3. MainWindow->resize(size);

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von Hafner ()

  • Die C++ Frage werden dir andere garantiert besser und mit weniger Googlen beantworten können, deswegen kümmer ich mich mal um QT ;)

    Also 800x600 ist deine Defaultgröße, die du wohl irgendwo eingestellt hast.
    Die minimumSizeHint liefert dir die minimale Größe, die dieses Widget (in diesem Fall die Mainapplikation) annehmen kann.
    expandedTo - wie der Name schon sagt - vergrößert nur. Es wird also das größere verwendet. Entweder 800x600 oder die Größe von MainWindow.

    Wie groß MainWindow tatsächlich ist... hm.. keine Ahnung.
    minimumSizeHint liefert QSize und QSize hat die get-Methoden width() und height().
    Ich würde also raten, dass das so funktioniert: MainWindow->minimumSizeHint().height()

    Die Pfeile benutzt du für Zeiger auf Referenzen:

    *(pp).id ist exakt das gleiche wie pp->id

    Ach die Doppelpunkte verwendet man doch nur zur Deklaration, oder hast du Sie in einem anderen Zusammenhang gefunden?
    Und Glückwunsch zum Hundertsten ;)
  • Dankeschön.
    Bin ja froh, dass mir keiner mit google.de geantwortet hat, wie ich es erwartet habe. :D

    Danke, das mit der Größe hab ich verstanden.

    *(pp).id ist exakt das gleiche wie pp->id
    Interessant. Dann würde es bedeuten, das bei

    Quellcode

    1. MainWindow->objectName().isEmpty()

    MainWindow->objectName() keine Referenz ist, sondern das Objekt selbst. Deswegen muss man einen Punkt schreiben während MainWindow eine Referenz beinhaltet und deswegen wird -> verwendet.
    Dankeschön.

    Deklarieren? Sicher? Da wird doch garkein Variablenname angegeben. Sieht eher wie initialisieren aus.

    Quellcode

    1. QString::fromUtf8("centralwidget")

    Gibt es dafür nicht einen Konstruktor? Oder wird :: generell bei statischen Methoden/Varialben verwendet? Also da ist mir noch einiges unklar.

    Quellcode

    1. namespace Ui {
    2. class MainWindow: public Ui_MainWindow {};
    3. } // namespace Ui

    Nach näherer Betrachtung denke ich, dass hier eine leere Klasse MainWindow definiert wird, die von Ui_MainWindow erbt und in Paket Ui liegt. In der Klasse werden jedoch keine Veränderung zur Superklasse vorgenommen. Im Prinzip nix ungewönliches, sah nur in dieser Schreibweise ungewohnt aus.
  • darthdespotism schrieb:

    Beim QString würde ich eher auf eine statische memberfunktion tippen ;)

    Stimmt, wenn man sich das Ziel anschaut macht das mehr Sinn. Parameter ist der String und zurück kommt ein ein konvertierter String. In PHP sieht das übrigens genauso aus ;)

    Hier noch die Doppelpunkte, die ich meinte:

    Quellcode

    1. //MeineKlasse.h
    2. class MeineKlasse
    3. {
    4. protected: int variable;
    5. // Konstruktoren und Destruktoren
    6. public: MeineKlasse(void);
    7. public: ~MeineKlasse(void);
    8. }

    Quellcode

    1. //MeineKlasse.cpp
    2. #include "MeineKlasse.h"
    3. MeineKlasse::MeineKlasse()
    4. {
    5. int variable = 5;
    6. }
    7. MeineKlasse::~MeineKlasse(void)
    8. {
    9. }