GradientDialogWidget
GradientDialogWidget
Hallo,
nachdem es wohl keinen GradientEditorDialog o.Ä. gibt, zumindest habe ich keinen gefunden, wollte ich mal fragen ob jemand vielleicht ein paar Ideen hat, wie man sowas am besten realisiert bzw. vielleicht hat sowas jemand schonmal gemacht ?
Den "Editor" in der Gradient-Demo finde ich wenig intuitiv bzw. zu kompliziert.
Eigentlich möchte ich 2 maximal 3 Farben einstellen können und vielleicht noch Focal Point bei nem RadialGradient und Start-/Endpunkte.
Hmmmmmmm...
nachdem es wohl keinen GradientEditorDialog o.Ä. gibt, zumindest habe ich keinen gefunden, wollte ich mal fragen ob jemand vielleicht ein paar Ideen hat, wie man sowas am besten realisiert bzw. vielleicht hat sowas jemand schonmal gemacht ?
Den "Editor" in der Gradient-Demo finde ich wenig intuitiv bzw. zu kompliziert.
Eigentlich möchte ich 2 maximal 3 Farben einstellen können und vielleicht noch Focal Point bei nem RadialGradient und Start-/Endpunkte.
Hmmmmmmm...
Uff habe ich schon länger nicht mehr benutzt / installiert.
Sieht der so aus wie auf diesem Screen ?
http://docs.gimp.org/de//images/dialogs ... dialog.png
Eigentlich gefiel mir der von Flash CS3 ganz gut.
Der ist quasi wie ein Slider, nur mit mehreren Handles, wobei jeder Handle eine Farbe repräsentiert. Wenn man den Handle anklickt, konnte man dessen Farbe bestimmen und mit ziehen halt die Stops setzen.
Ja ich glaube den finde ich gut
Gibts sowas schon als Widget ?
Oder zumindest einen "Multi-Handle"-Slider ?
Sieht der so aus wie auf diesem Screen ?
http://docs.gimp.org/de//images/dialogs ... dialog.png
Eigentlich gefiel mir der von Flash CS3 ganz gut.
Der ist quasi wie ein Slider, nur mit mehreren Handles, wobei jeder Handle eine Farbe repräsentiert. Wenn man den Handle anklickt, konnte man dessen Farbe bestimmen und mit ziehen halt die Stops setzen.
Ja ich glaube den finde ich gut
Gibts sowas schon als Widget ?
Oder zumindest einen "Multi-Handle"-Slider ?
Das hier wäre schon mal ein Ansatz:
http://jpnurmi.kapsi.fi/docs/classQxtSp ... l#_details
http://jpnurmi.kapsi.fi/docs/classQxtSp ... l#_details
Oh mann, echt frustrierend, oder ich stelle mich einfach zu doof an...
Ich versuche die Bibliothek qxt bei mir zum Laufen zu bekommen, nach diesem Guide :
http://dev.libqxt.org/libqxt/wiki/user_guide
Der Pfad zu qmake ist in meiner PATH Variable enthalten, kann qmake.exe von überall aufrufen.
Trotzdem scheitert configure.bat
Ich bin relativ neu bei QT, hab bisher nur mit den QXyz Klassen rumgespielt. Wie kann ich denn externe libs einbinden ??
Sorry für jegliche blöde Frage
Ach ja, ich fuhrwerke auf Windows herum..
Ich versuche die Bibliothek qxt bei mir zum Laufen zu bekommen, nach diesem Guide :
http://dev.libqxt.org/libqxt/wiki/user_guide
Der Pfad zu qmake ist in meiner PATH Variable enthalten, kann qmake.exe von überall aufrufen.
Trotzdem scheitert configure.bat
Ich bin relativ neu bei QT, hab bisher nur mit den QXyz Klassen rumgespielt. Wie kann ich denn externe libs einbinden ??
Sorry für jegliche blöde Frage
Ach ja, ich fuhrwerke auf Windows herum..
So...wen es interessiert, ich habe mir jetzt selber einen Dialog gebaut
Der gefällt mir eigentlich echt gut:
Nur jetzt habe ich ein anderes Problem:
Ich bekomme ein QGradient Zeiger aus meinem Dialog. Nun möchte / "muss" ich den oder meinetwegen die Dereferenzierung davon einem QGraphicsItem mit item->setData(...) zuweisen.
Das funktioniert auch.
Nur das rausholen geht nicht. Das versuche ich so :
Der Compiler spuckt mir den Fehler:
Die Version ohne Zeiger geht genau so wenig.
Der gefällt mir eigentlich echt gut:
Nur jetzt habe ich ein anderes Problem:
Ich bekomme ein QGradient Zeiger aus meinem Dialog. Nun möchte / "muss" ich den oder meinetwegen die Dereferenzierung davon einem QGraphicsItem mit item->setData(...) zuweisen.
Das funktioniert auch.
Nur das rausholen geht nicht. Das versuche ich so :
Code: Alles auswählen
QVariant variant = item->data(ID_GRADIENT);
QGradient *gradient = (QGradient*)qVariantValue<QGradient*>(variant);
Ich dache man kann grundsätzlich alles in ein QVariant packen ??qt_metatype_id is not a member of 'QMetaTypeId<QGradient*>'
Die Version ohne Zeiger geht genau so wenig.
Prinzipiell kannst du alles in nen Variant packen - ja. Warum nimmst du hier den Gradient per new? QGradient ist kopierbar und sollte das auch fix erledigen. Evtl. geht das per Value dann auch sofort mit QVariant.
Ansonsten sagt dir die Meldung auch, wie du das Problem behebst: qRegisterMetaType (den Teil hast du nicht mitgepostet).
Ansonsten sagt dir die Meldung auch, wie du das Problem behebst: qRegisterMetaType (den Teil hast du nicht mitgepostet).
Ich frickel gerade mit einer anderen Lösung herum die jetzt auch eigentlich gut funktioniert.
Einen Gradient bekomme ich auch über den für das Item verwendeten Brush mit brush->gradient().
Den Brush hatte ich eh schon gespeichert und ausgelesen, von daher so ganz gut, blos ecke ich schon wieder an :
Ich möchte gerne über alle Stops des Gradient's iterieren.
Dazu mache ich folgendes:
Hatte auch zuerst eine foreach variante, die aber genauso wenig lief, denn
das ganze stürzt zur Laufzeit mit einem Illegal Instruction Signal ab direkt in der Zeile mit dem for-Schleifen-Kopf ab..
Komisch, weil ich beim Debuggen an dieser Stelle eigentlich keinen Fehler in meinen Variablen entdecke, alles passt, auch die Werte der QGradientStops in dem Vector.
( QGradientstop is ja nur ein typedef für vector<QGradientstop>....
und das wiederum ein QPair<qreal, QColor> )
EDIT:
Logo, der Fehler liegt natürlich im qDebug Aufruf.
Der muss so heissen:
Was ich echt gruseligst finde, mal so am Rand...
Einen Gradient bekomme ich auch über den für das Item verwendeten Brush mit brush->gradient().
Den Brush hatte ich eh schon gespeichert und ausgelesen, von daher so ganz gut, blos ecke ich schon wieder an :
Ich möchte gerne über alle Stops des Gradient's iterieren.
Dazu mache ich folgendes:
Code: Alles auswählen
// Hässlich ich weiss, aber geht sonst nicht anders...
gradient = const_cast<QGradient*>(brush.gradient());
// Funktioniert
qDebug("gradient type: %d ",gradient->type());
QGradientStops stops = gradient->stops();
for(int i = 0 ; i < stops.count() ; i++)
{
qDebug("Stop at %f with color: %c",
stops.at(i).first,
stops.at(i).second.name().toAscii());
}
das ganze stürzt zur Laufzeit mit einem Illegal Instruction Signal ab direkt in der Zeile mit dem for-Schleifen-Kopf ab..
Komisch, weil ich beim Debuggen an dieser Stelle eigentlich keinen Fehler in meinen Variablen entdecke, alles passt, auch die Werte der QGradientStops in dem Vector.
( QGradientstop is ja nur ein typedef für vector<QGradientstop>....
und das wiederum ein QPair<qreal, QColor> )
EDIT:
Logo, der Fehler liegt natürlich im qDebug Aufruf.
Der muss so heissen:
Code: Alles auswählen
qDebug("Stop at %f with color: %s",
stops.at(i).first,
stops.at(i).second.name().toStdString().c_str());
Genau dafür hat Qt den "qPrintable" erfunden.skeemo hat geschrieben:Der muss so heissen:Was ich echt gruseligst finde, mal so am Rand...Code: Alles auswählen
qDebug("Stop at %f with color: %s", stops.at(i).first, stops.at(i).second.name().toStdString().c_str());
alternativ: #include <QDebug> und dann qDebug() als Stream nutzen...
Code: Alles auswählen
qDebug() << "Stop at " << stops.at(i).first << "with color: " << stops.at(i).second.name();