1)
Qt fournissant un système de gestion de mémoire (et surtout de la destruction) de père en fils, il est intensivement ancré dans le framework que tous les objets héritant de QObject sont utilisés avec des pointeurs uniquement.
Rien ne t'oblige à le faire, mais comme la majorité des argument suivent cette logique, si tu ne le fait pas, tu va passer ton temps à mettre des & et des * pour passer de valeur à adresse et vice versa.
Par contre, pour les objets n'héritant pas de QObject (notamment ici QString et QPixmap), ils ont tendance à être utilisés par valeur, comme des variables classique (donc pareil, si tu veux pas galérer pour rien, tu devrais en faire de même)
2)
Déjà, des problèmes:
si tu veux que ton painter dessine dans ton widget, il faut lui passé un pointeur sur ce widget (sinon il ne sait pas ou dessiner).
Donc quand tu appelle le constructeur de ton QPainter, il faut lui passé this en paramètre.
Cela dit, le painter est sensé effectuer ses actions de dessin dans une méthode prévue à cet effet ( void QWidget::paintEvent(QPaintEvent*); ), qu'il te faut redéfinir dans ta classe si tu veux dessiner dans ton widget, je ne sais pas trop ce que va donner le résultat si tu dessine dans le constructeur...
Enfin, la réponse à ta question:
drawPixmap prend en 3e paramètre un QPixmap, et non pas un pointeur sur un QPixmap, pour faire marche ta 1ere version, il faudrait faire
_painter->drawPixmap(0, 0, *_pixmap);
Enfin, c'est la même chose pour la 3.
Si ta string est déclarée par valeur, l'opérateur = marche, par contre si le premier est un pointeur et le deuxième une instance de QString, ça ne marchera pas.
PS: comme le dit Archi, tu a l'air d'être débutant en C++, aussi je ne saurai que trop te recommander de déjà commencer par apprendre le C++ "classique" avant de te mettre au framework Qt, qui fait appel à beaucoup de notions qui ont l'air de t'échapper.
Partager