C++Guns – RoboBlog blogging the bot

23.06.2010

QtCreator OpenCV autocomplete

Filed under: Allgemein — Thomas @ 10:06

Um die Autovervollständigung auf für die OpenCv funktionen zu nutzen, muss man nur den OpenCv Inkludepath in die .pro Datei eintragen:

INCLUDEPATH += /usr/include/opencv

Einmal qmake ausführen und fertig :)

15.06.2010

Referencen und so

Filed under: Allgemein — Thomas @ 13:06

Ich weiss zwar nicht warum, aber so funktioniert es. Da spart man sich den doppel Pointer

blah *a = 0;
func(a);

void func(blah *&a) {
a = new blah;
}

Also, ein Pointer einer Funktion übergeben und erst in der Funktion Speicher reservieren. Der Pointer bleibt aber ausserhalb der Funktion nutzbar.

08.06.2010

Pointer und so

Filed under: Allgemein — Tags: — Thomas @ 21:06

Hier gefunden http://www.wachtler.de/ck/8_4_Grunddatentypen.html

C erhält durch Zeigerarithmetik erst richtig Leben; die größere Effektivität von Programmen in C rührt zu einem großen Teil davon. Angenommen, eine Funktion soll ein Feld mit double-Elementen löschen, also alle Werte zu 0.0 setzen. Ein ehemaliger FORTRAN- oder Pascal-Programmierer würde die Funktion vielleicht so schreiben:

/* grloel.c 31. 7.95 kw
*/

#include

void loesche_double( double feld[], size_t wieviele )
{
size_t i;

for( i=0 ; i < wieviele ; i++ ) feld[i] = 0.0; } Das funktioniert natürlich, aber die Lösung enthält überflüssige Berechnungen. Abgesehen von der nötigen Erhöhung des Schleifenzählers (Auswertung von ++) muß bei jedem Durchlauf die Adresse des Elementes feld[i] berechnet werden. Dazu muß das Programm die Adresse hernehmen, die mit dem Namen feld verbunden ist (das ist die Adresse des ersten Feldelements), und dazu ein Produkt addieren, nämlich i*sizeof(double) (zur Auswertung von feld[i]). Mit Zeigerarithmetik läßt sich die Funktion wesentlich schneller machen: /* grloes.c 31. 7.95 kw */ #include

void loesche_double( double *feld, size_t wieviele )
{
double *pfeld = feld;
double *pende = feld+wieviele;

while( pfeld < pende ) *pfeld++ = 0.0; } Jetzt wird der Parameter feld als Zeiger auf das erste Element aufgefaßt. Ein Zeiger (pfeld) wandert durch das Feld und zeigt nacheinander auf die zu löschenden Elemente. Neben der eigentlichen Zuweisung (=) muß in der Schleife nur noch zu pfeld bei jedem Durchlauf der Wert sizeof(double) addiert werden (Auswertung von ++). Die aufwendige Multiplikation entfällt, außerdem hat man statt zwei Additionen nur noch eine.

03.06.2010

Ot Stolperfallen

Filed under: Allgemein — Thomas @ 12:06

1. Wenn man die Plattform wechselt danach IMMER qmake ausführen. Oder gleich das ganze Projekt bereinigen.

2. Wenn man mit OpenGl arbeitet, solle man Display Listen erst dann erstellen, nachdem initializeGL() aufgerufen wurde

3. Bei allen Objeken, die das QMainWindow als parent haben, braucht man sich nicht um die Speicherfreigabe kümmern?
Ist das korrekt?

QMainWindow ist von QWidget abgeleitet
QWidget ist von QObject abgeleitet

Alle Objekte, die von QObject abgeleitet sind und als parent ein von QObject abgeleitete Klasse haben werden beim zerstören des parent's über delete mitgelöscht.

Powered by WordPress