Farbwert eines Graphicsitem auslesen
Farbwert eines Graphicsitem auslesen
Hallo,
auf einer Graphicsview liegen mehrere rechteckige einfarbige Items in einer Scene. Kann mir vielleicht jemand einen Tip geben, wie ich einen Farbwert aus den Items auslesen kann? Ist dies überhaupt möglich?
Habe den Assistanten schon sehr lange durchforstet, aber bin leider nicht fündig geworden. Zweifel auch langsam daran, ob dies überhaupt möglich ist.
Lieben Gruß
Kenni
auf einer Graphicsview liegen mehrere rechteckige einfarbige Items in einer Scene. Kann mir vielleicht jemand einen Tip geben, wie ich einen Farbwert aus den Items auslesen kann? Ist dies überhaupt möglich?
Habe den Assistanten schon sehr lange durchforstet, aber bin leider nicht fündig geworden. Zweifel auch langsam daran, ob dies überhaupt möglich ist.
Lieben Gruß
Kenni
hallo,
wenn die items rechteckig sind, dann sind sie bestimmt vom typ QGraphicsRectItem.
wenn die items rechteckig sind, dann sind sie bestimmt vom typ QGraphicsRectItem.
Code: Alles auswählen
myScene = new QGraphicsView()
//....
//...
//...
//101. element
int x = 100;
QGraphicsRectItem* item = (QGraphicsRectItem*(myScene->items().at(x));
//QBrush QAbstractGraphicsShapeItem::brush () const
//QGraphicsRectItem erbt von QAbstractGraphicsShapeItem
QBrush myRectBrush = item.brush();
//
hm, hab jetzt einiges versucht, aber leider klappts nicht richtig.
mit folgendem code wird eine graphicscene mit rechtecken gefüllt.
Anschließend würde ich gerne wenn ich einen Button drücke über gScene die Farbwerte der items abfragen und genau hierbei hab ich das Problem. eine graphicscene liefert beim Aufruf von itemAt ein graphicitem und kein graphicrectitem.
aber nur graphicrectitem liefert mir die Möglichkeit die Farbwerte über brush zu bekommen.
folgender code liefert mir bei einem Item z.B den Rotwert als Integer.
So würde ich das gerne auch auf eine Scene anwenden.
mit folgendem code wird eine graphicscene mit rechtecken gefüllt.
Code: Alles auswählen
QGraphicsScene *gScene = new QGraphicsScene();
gScene->setSceneRect(-250.0 , -125.0 , 500.0, 250.0);
for (int i = -250; i < 250; i += 25)
{
for (int j = -125; j < 125; j += 25)
{
QGraphicsRectItem *item = new QGraphicsRectItem();
item->setRect(0,0,25,25);
item->setPen(QPen(Qt::black));
item->setBrush(Qt::red);
item->setPos(QPointF(i, j));
gScene->addItem(item);
}
}
ui.graphicsView->setScene(gScene);
aber nur graphicrectitem liefert mir die Möglichkeit die Farbwerte über brush zu bekommen.
folgender code liefert mir bei einem Item z.B den Rotwert als Integer.
So würde ich das gerne auch auf eine Scene anwenden.
Code: Alles auswählen
QGraphicsRectItem *item = new QGraphicsRectItem();
item->setRect(0,0,10,10);
item->setBrush(Qt::red);
item->setPos(0,0);
int iRed = item->brush().color().red();
Dann schau dir mal das hier an: qgraphicsitem_cast
@upsala: vielleicht kannst du nochmal einen blick drauf werfen 
die abgeleitete klasse:
und der aufruf nach den beiden for-schleifen:
mit gScene->items().at(0) hol ich mir das erste element in der scene als graphicsitem und dieses wandel ich mit dem cast in ein rect um. nächster befehl bewirkt einen absturz.
sind denn die werte im header richtig?
die abgeleitete klasse:
Code: Alles auswählen
#include <QGraphicsRectItem>
class CustomItem : public QGraphicsRectItem
{
public:
CustomItem();
~CustomItem();
enum { Type = UserType + 1};
int type() const { return Type; }
private:
};
Code: Alles auswählen
QGraphicsRectItem* rectItem= qgraphicsitem_cast<CustomItem *> (gScene->items().at(0));
int iRed = rectItem->brush().color().red();
sind denn die werte im header richtig?
ok, ich habe eine andere castlösung gefunden.
ist vielleiht nicht die richtige, aber sie funkioniert
würd mich aber shcon interessieren, was ich bei dem anderen falsch gemacht hab. naja, aber schonmal vielen dank für die hilfe![/code]
ist vielleiht nicht die richtige, aber sie funkioniert
Code: Alles auswählen
QList<QGraphicsItem *> items = gScene->items();
foreach (QGraphicsItem* item, items)
{
QGraphicsRectItem* rectItem = dynamic_cast<QGraphicsRectItem *>(item);
int iRed = rectItem->brush().color().red(); //liefert den letzten Rotwert
}