dise que j'ai un gradient de doublure, comme indiqué: Comment obtenir la couleur du point qpointf (0, 28.5) dans ce gradient? P> En effet je Voulez-vous avoir ce genre de distribution de couleurs pour pouvoir choisir des couleurs intermédiaires. Je m'en fiche si cela se fait en utilisant qlineargradien ou autre chose. P> p>
4 Réponses :
qvariantanimation a la fonctionnalité similaire et Qvariantanimation :: Keyvalueat peut renvoyer la valeur dont vous avez besoin. Vous pouvez entrer dans le code de QVarianTanimation et voir comment fonctionne de keyvalueat. P>
Je ne sais pas comment utiliser la classe abstraite qvariantimation. S'il vous plaît, si vous avez exemple, démontrez-le.
Utilisez simplement des fonctions ci-dessous comme ce que vous avez fait par qlineargradient: - qvariantanimation :: setStartValue (Constartvariant & valeur) - Qvariantanimation :: SetkeyValueat (QReal Step, const Qvariant & Value); - Qvariantanimation :: SetendValue (Cons-ce Qvariant & Value); Ensuite, obtenez la valeur à un point par - qvariantanimation :: keyvalueat (QReal Step); La question ici est, qvariantanimation ne supporte pas QColor. Je ne suis pas sûr de convertir QColor vers des œuvres d'int.
Qvariantanimation est une classe abstraite. Il devrait être hérité et mis en œuvre.
Pourquoi ne pas essayer la classe concrète "qpropertyanimation"?
Il n'y a qu'un moyen de le faire: p>
Il y a un membre statique à QpixMap Classe 1) Dessinez votre gradient sur votre widget; p>
2) Prenez la surface du widget dans pixmap en utilisant cette fonction; 3) convertir le jeton pixmap en 4) 5) La couleur de si retournée est la couleur que vous recherchiez. p>
QPIXMAP QPIXMAP :: Grabwindow (Fenêtre WID, INT X = 0, INT Y = 0, INT WIDTH = -1, INT Hauteur = -1) CODE> P> P> P> P>
wid code> peut être reçu de
qwidget :: efficacewinid () code>; p>
qimage code> (il y a un constructeur disponible); p>
int qimage :: pixelindex (int x, int y) code> retourne l'index de pixels à (x, y) dans
qImage code> la table de couleur de QImage code>. Dans votre cas, vous devez calculer la valeur du pourcentage de la hauteur du widget (
pwidget-> hauteur () / 100 * 28.5 code>). p>
qrgb qimage :: couleur (int i) code> retourne la couleur dans la table des couleurs à l'index i. p>
La réponse de Mason Zhang fonctionne et très bien!
Laisser ControlPoints () renvoie un qmap
Je stocke les couleurs de gradient dans une qlist, puis calculez avec une interpolation de couleur.
QColor ColorGradient::getColor(double value) { qDebug()<< "ColorGradient::getColor:"; //Asume mGradientColors.count()>1 and value=[0,1] double stepbase = 1.0/(mGradientColors.count()-1); int interval=mGradientColors.count()-1; //to fix 1<=0.99999999; for (int i=1; i<mGradientColors.count();i++)//remove begin and end { if(value<=i*stepbase ){interval=i;break;} } double percentage = (value-stepbase*(interval-1))/stepbase; QColor color(interpolate(mGradientColors[interval],mGradientColors[interval-1],percentage)); return color; } QColor ColorGradient::interpolate(QColor start,QColor end,double ratio) { int r = (int)(ratio*start.red() + (1-ratio)*end.red()); int g = (int)(ratio*start.green() + (1-ratio)*end.green()); int b = (int)(ratio*start.blue() + (1-ratio)*end.blue()); return QColor::fromRgb(r,g,b); }
Comme il s'agit d'une vieille question répondue. Pourquoi c'est la meilleure question et qui peut aider à la question de OP? S'il vous plaît, évitez de poster une question qui a accepté la réponse.
Je pense que c'est une bonne réponse. Pour que d'autres cherchent comme moi, je trouve cela beaucoup plus utile que la réponse acceptée.