Witam
Postaram się mój problem opisać jak najkrócej, chociaż nie jest to takie łatwe.
Nie rozumiem pewnego mechanizmu w QT. Chodzi mi o korzystanie z funkcji, których argumentem jest referencja na obiekt pewnej klasy.
Przykładowo chcemy narysować linie. Jej kolor, grubość, styl możemy ustawić tak:
QPainter painter;
QPen pen;
pen.setWidth(2);
pen.setStyle(Qt::SolidLine);
pen.setBrush(Qt::blue);
painter.setPen(pen);
Chciałbym teraz wziąźć po lupę funkcje setBrusch. Jej definicja wygląda tak.
void QPen::setBrush(const QBrush & brush)
Jak widać funkcja przyjmuje za argument referencje na obiekt klasy QBrush. Zatem pytanie brzmi dlaczego kompilator nie sygnalizuje błędu w powyższym przypadku, skoro potrzebna jest referencja na obiekt, a powyżej mamy wywołanie tylko z Qt core enum.
Poprawnie powinno być to wywołanie z konstruktorem jawnym czyli (też działa):
setBrush(QBrush(Qt::blue))
zgodnie z definicją
QBrush(Qt::BrushStyle style)
Można też funkcję tą użyć z konstruktorem nie jawnym:
QBrush c(Qt::blue);
pen.setBrush(c);
Czy kompilator domyśla się tego, że to obiekt QBrush i sam to sobie dopisuje ? Czy jest to jakieś niejawne działanie, dodatkowe przeładowanie?
dodanie znaczników <code class="cpp"> - Furious Programming