erstmal ein netten Gruß an alle hier. Hoffe ihr könnt mir helfen.
Ich erstelle eine Klasse die von QWidget ableitet.
Mit Klasse = new Klasse(...) kreiere ich Sie und es funktioniert so wie es soll. Erstelle ich aber eine zweite Klasse wird nicht mehr das gemalt was ich erwarte. Woran liegt das und was amche ich falsch?
WaitSymbol.h
Code: Alles auswählen
#include <QWidget>
namespace Test
{
class WaitSymbol : public QWidget
{
Q_OBJECT
public:
// Konstruktor
WaitSymbol(QRect rect,
unsigned int lines_base,
QColor color_base,
unsigned int lines_top,
QColor color_top,
double opacity
);
~WaitSymbol();
// Eigenschaften
void setPosition(QPoint pos);
void setSize(QSize size);
void setOpacity(double opacity);
void Enabled(bool enabled);
void Visible(bool visible);
private:
QColor color_base; // Grundfarbe des Symbols
QColor color_top; // Funktionsfarbe
QRect rect; // Position und Größe
QPoint pos; // Position
QSize size; // Größe
bool enabled; // Aktiv / Inaktiv
bool visible; // Sichtbar / Unsichtbar
double opacity; // Transparenz
unsigned int lines_base; // Anzahl der Linien
unsigned int lines_top; // Anzahl der aktiven Linien
protected:
void paintEvent(QPaintEvent *event);
};
}
Code: Alles auswählen
void WaitSymbol::paintEvent(QPaintEvent *event)
{
if(visible)
{
static unsigned int state = 0;
int side = width() / 2;
QPainter painter(this);
painter.setRenderHint(QPainter::Antialiasing);
painter.translate(width() / 2, height() / 2); // Mittelpunkt festlegen
QPoint Line[4] =
{
QPoint((int) (side*0.08),(int)(side*0.5)),
QPoint((int)-(side*0.08),(int)(side*0.5)),
QPoint((int)-(side*0.08),(int)(side*0.9)),
QPoint((int) (side*0.08),(int)(side*0.9))
};
if(enabled)
{
if(state == lines_base)
state = 0;
painter.rotate((360.0/(qreal)lines_base)*(qreal)state);
// Basis malen
painter.save();
painter.setBrush(color_base);
painter.setPen(color_base);
for (unsigned int x = 0; x < lines_base - lines_top; ++x)
{
painter.drawConvexPolygon(Line, 4);
painter.rotate(360.0/lines_base);
}
// Top malen
painter.setBrush(color_top);
painter.setPen(color_top);
for (unsigned int x = 0; x < lines_top; ++x)
{
painter.setOpacity((qreal)(x+1)/(qreal)(lines_top-1.0)*1.0);
painter.drawConvexPolygon(Line, 4);
painter.rotate(360.0/lines_base);
}
painter.restore();
state++;
}
else
{
// Basis malen
painter.save();
painter.setBrush(color_base);
painter.setPen(color_base);
for (unsigned int x = 0; x < lines_base; ++x)
{
painter.drawConvexPolygon(Line, 4);
painter.rotate(360.0/lines_base);
}
painter.restore();
state = 0;
}
}
}
Code: Alles auswählen
symbol = new WaitSymbol(QRect(10,250,40,40),
10,
QColor(20, 20, 20),
4,
QColor(255, 255, 255),
1.0);
symbol->Visible(true);
symbol->Enabled(true);
addWidget(symbol);