You are not logged in.

  • Login

1

Thursday, August 30th 2007, 4:43pm

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.

C/C++ Quellcode

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


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

C/C++ Quellcode

1
MainWindow->objectName().isEmpty()

C/C++ Quellcode

1
QMetaObject::connectSlotsByName(MainWindow);


Was wird in diesem Quelltextausschnitt gemacht:

C/C++ Quellcode

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


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

C/C++ Quellcode

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

This post has been edited 1 times, last edit by "Hafner" (Aug 30th 2007, 4:48pm)


2

Thursday, August 30th 2007, 5:49pm

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 ;)

3

Thursday, August 30th 2007, 7:31pm

Dankeschön.
Bin ja froh, dass mir keiner mit www.google.de geantwortet hat, wie ich es erwartet habe. :-D

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

Quoted

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

Source code

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.

Source code

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.

Source code

1
2
3
namespace Ui {
class MainWindow: public Ui_MainWindow {};
} // 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.

4

Thursday, August 30th 2007, 9:05pm

Ich hoffe ich schreibe jetzt keinen schwachsinn, aber ich denke dass das :: zu einem NameSpace gehört.
also so wie std::cout oder std:cin

5

Thursday, August 30th 2007, 9:37pm

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

6

Thursday, August 30th 2007, 10:49pm

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:

C/C++ Quellcode

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

C/C++ Quellcode

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

7

Friday, August 31st 2007, 1:11am

Also bei statischen Methoden (den Konstruktor kann man ja auch als statische Methode sehen) und bei Namensräumen ist das Trennzeichen ::

Similar threads

Social bookmarks