Hmm .. hab mal drübergeschaut.
- du produzierst in deiner main.cpp gleich mal ein Speicherleck
du machst was mit new, aber nirgends kommt ein delete ... hat nix mit Qt zu tun, eher mit c++
- du hast unnötige Membervariabeln (zB das Layout, du merkst dir den Pointer, brauchst es aber eigentlich nie wieder)
- Warum benutzt du rohe Arrays wenn Qt mit vielen schönen Containern kommt?
Code: Alles auswählen
// statt
QString bildname;
bildname = (":/Bild")+(QString("%1").arg(j+1));
// lieber
const QString bildname(":/Bild" + QString("%1").arg(j+1) );
// damit erlaubst du dem Compiler Optimierungen bezüglich des Speichers da er nun weiss das bildname sich nicht ändert
Code: Alles auswählen
// statt
if (j < 8)
{
Grid->addWidget(button[j],0,j);
}
if ((j > 7) && (j < 16))
{
Grid->addWidget(button[j],1,j-8);
}
if ((j > 15) && ( j < 24))
{
Grid->addWidget(button[j],2,j-16);
}
// geht auch
if (j < 8)
{
Grid->addWidget(button[j],0,j);
}
else if (j < 16)
{
Grid->addWidget(button[j],1,j-8);
}
else
{
Grid->addWidget(button[j],2,j-16);
}
// oder einfach so:
Grid->addWidget(button[j],j/8,j%8);
/*
j Wert '/8' '%8'
0 0 0
1 0 1
2 0 2
und so weiter
7 0 7
8 1 0
9 1 1
10 1 2
und so weiter
16 2 0
17 2 1
und so weiter
23 2 7
*/
- das Thema fand ich interessant, hab zum Vergleich mal mein Code angehängt. Lizenz: MDWDW
Kritik am eigenen Code:
Die includes werden so nicht gebraucht, sollte man auf die benötigten Header einschränken:
Code: Alles auswählen
//.h
#include <QtCore/QString>
#include <QtCore/QMultiMap>
#include <QtGui/QWidget>[code]
// cpp
#include "adventskalender.h"
#include <QtGui/QGridLayout>
#include <QtGui/QHBoxLayout>
#include <QtGui/QVBoxLayout>
#include <QtGui/QImage>
#include <QtGui/QIcon>
#include <QtGui/QMessageBox>
#include <QtGui/QToolButton>
#include <QtCore/QSignalMapper>
#include <QtCore/QDate>[/code]- hab keine Rechtschreibkorrektur drüberlaufen lassen
- hab nur wein Kommentare, keine Doku
Ausbau: statt QString zu verschenken wären QVariants möglich, showGiftForDay() ruft dann nen helper auf der verschiedene QVariants (String, Image, eigene registrierte Metatypes) verschieden anzeigt usw.
Code: Alles auswählen
class AdventsKalender : public QWidget {
// snipp
public slots:
void addGiftForDay(const int, const QVariant &);
private slots:
void showGiftForDay(const int);
// snipp
private:
showGift(const & QVariant);
QMultiMap<int,QVariant> m_gifts;
// snipp
};
void AdventsKalender::showGift(const & QVariant v)
{
// pseudo
if (v.type() == QVariant::dies) zeigeDies(v);
else if (v.type() == QVariant::das) zeigeDas(v);
else if (v.type() == QVariant::jenes) zeigeJenes(v);
}