Seite 1 von 1
Polygon::contains Point + MouseKlickEvent????[gelöst]
Verfasst: 13. März 2008 14:39
von Qt-nator
Hi,
mein vorhaben besteh darin in einem Widget in dem mehrere Polygone gezeichnet sind durch klicken auf eines der Polygone desen Farbe zu ändern.
Mein Problem ist nur das ich das MouseEvent nicht wirklich mit dem contains Point zusammen kriegen.
Code: Alles auswählen
void
ParameterToolWidget::mouseDoubleClickEvent(QMouseEvent* event)
{
KlickPunkt.setX(event->pos().x());
KlickPunkt.setY(event->pos().y());
QString sMouseInteraction = "Maustaste wurde doppelt geklickt.";
emit si_mousePosition(sMouseInteraction);
if(polygon.containsPoint(KlickPunkt,Qt::WindingFill))
{
QMessageBox::information( this, "Info", Test);
}
}
Ja das mein Ansatz nur leider Passiert beim doppelklicken dann überhauptnichts... wo ja die MSG-Box kommen soll.
Wäre dankbar für Ratschläge.
Qt-nator
Re: Polygon::contains Point + MouseKlickEvent????
Verfasst: 13. März 2008 14:57
von neuschi
Qt-nator hat geschrieben:
mein vorhaben besteh darin in einem Widget in dem mehrere Polygone gezeichnet sind durch klicken auf eines der Widgets desen Farbe zu ändern.
Erkläre das mal etwas genauer. Wenn ich mir nämlich deinen Code ansehe scheinst du nur ein Polygon zu behandeln. Und wieso "eines der Widgets"?!
Irgendwie werde ich nicht ganz schlau daraus.
Code: Alles auswählen
void
ParameterToolWidget::mouseDoubleClickEvent(QMouseEvent* event)
{
KlickPunkt.setX(event->pos().x());
KlickPunkt.setY(event->pos().y());
if(polygon.containsPoint(KlickPunkt,Qt::WindingFill))
{
QMessageBox::information( this, "Info", Test);
}
}
Und warum hier der "KlickPunkt"?! event->pos() ist doch schon ein QPoint.
\Ralf
Verfasst: 13. März 2008 15:04
von Qt-nator
hups hab mich verschrieben ... sollte heisen durch klicken die farbe eines der Polygone zu ändern. (ändere ich dann gleich noch)
polygon.containsPoint(KlickPunkt,Qt::WindingFill) <-- benötigt einen QPoint da kann ich nicht einfach
event->pos().x()
event->pos().y()
reinschreiben jedenfalls krieg ich dann fehlermeldung.
Also hab ein Widget mit Polygonen drin will auf ein Polygon klicken dann solls sich umfärben (für den anfang eine MSG-Box)
Verfasst: 13. März 2008 15:16
von neuschi
Qt-nator hat geschrieben:
polygon.containsPoint(KlickPunkt,Qt::WindingFill) <-- benötigt einen QPoint da kann ich nicht einfach
event->pos().x()
event->pos().y()
reinschreiben jedenfalls krieg ich dann fehlermeldung.
Wie wäre es mit
Hast du auch mal OddEvenFillRule probiert?
Mach einfach mal an der Stelle folgendes:
qDebug() << polygon;
qDebug() << event->pos();
Wenn du unter Windows bist und nicht im Visual Studio, dann solltest du noch die console in der *.pro Datei aktivieren.
Schick dann mal die Ausgabe rüber.
\Ralf
Verfasst: 13. März 2008 15:21
von Christian81
Ausserdem kann es sein dass das Koordinatensystem nicht passt.
Verfasst: 13. März 2008 15:31
von Qt-nator
Also ich arbeite mit Visual studio... und kompilieren tut er ja ordendlich.
ist natürlich war ... garnicht bedacht, dass das auch geht.
OddEvenFillRule hab ich probiert bringt nichts.
Und das Koordinatensystem müsste stimmen da ich mir ja die Positionen anzeigen lassen kann und sie da ja stimmen.
Wenn du unter Windows bist und nicht im Visual Studio, dann solltest du noch die console in der *.pro Datei aktivieren.
Schick dann mal die Ausgabe rüber.
Versteh ich nicht? wie soll ich das machen? (Hab ich noch nie gemacht sorry)
Verfasst: 13. März 2008 16:12
von neuschi
Qt-nator hat geschrieben:
Wenn du unter Windows bist und nicht im Visual Studio, dann solltest du noch die console in der *.pro Datei aktivieren.
Schick dann mal die Ausgabe rüber.
Versteh ich nicht? wie soll ich das machen? (Hab ich noch nie gemacht sorry)
in deine *.pro-Datei folgendes reinschreiben:
CONFIG += console
Dann geht auch unter Windows ein Shell-Fenster auf, in dem die Ausgaben erscheinen.
Aber da du unter Visual Studio arbeitest, musst du dort einfach nur ins "Output" Tab gucken.
Wenn du also in deinen Code folgendes reinschreibst:
dann sollte im Output-Tab ähnliches wie das hier erscheinen:
Code: Alles auswählen
QPolygon(QPoint(100,100) QPoint(34,23) )
QPoint(33,83)
Und das poste bitte mal hier.
\Ralf
Verfasst: 14. März 2008 09:45
von Qt-nator
Morgen,
also ich hab kein *.pro file ... aber den Code hab ich eingefügt und raus kommt dann dabei:
QPolygonF<>
QPoint<73,247>
QPolygonF<>
QPoint<73,156>
Je nach dem wo ich Klicke.
Wohl bemerkt das kommt egal ob ein Polygon im Widget vorhanden ist oder nicht.
Verfasst: 14. März 2008 12:20
von upsala
Dann wäre es mal an der Zeit das Polygon auch mit Informationen zu befüllen, denn wie du siehst ist es leer...
Verfasst: 18. März 2008 08:08
von Qt-nator
Morgen,
wie soll ich das verstehn???
Das ist meine Funktion um die Polygone zu zeichnen:
Code: Alles auswählen
ParameterToolWidget::DrawPolygon(double dgrad1, double dgrad2, double dR, double dR2, int nR, int nG, int nB)
{
QPainter painter(this);
painter.setPen(Qt::NoPen);
painter.setBrush(QColor(nR,nG,nB));
painter.setRenderHint(QPainter::Antialiasing, true);
QPolygonF polygon;
for (int nDeg=dgrad1; nDeg<=dgrad2; nDeg+=5)
{
polygon.push_back( QPointF( dWidth / 2. + dR * cos_d(nDeg),
dHeight / 2. + dR * sin_d(nDeg) ) );
}
for (int nDeg=dgrad2; nDeg>=dgrad1; nDeg-=5)
{
polygon.push_back( QPointF( dWidth / 2. + dR2 * cos_d(nDeg),
dHeight / 2. + dR2 * sin_d(nDeg) ) );
}
Enthält das Polygon dann keine Informationen? Weil es ist ja mit der Farbe gefühlt die ich angegeben hab?
Gruß
Qt-nator
Verfasst: 18. März 2008 08:10
von Christian81
C++ Basics - was ist eine Member-Variable und was eine lokale Definition?
Verfasst: 18. März 2008 08:37
von Qt-nator
Verstehe jetzt nicht was das mit meinem Problem zu tun hat. Weil was ich gepostet hab Funktioniert ja!
Verfasst: 18. März 2008 08:38
von Christian81
Du erzeugst eine lokale Variable polygon
Verfasst: 18. März 2008 08:48
von Qt-nator
Ja schon. Nur wenn ich die Variable polygon im Header als public erzeuge, dann krieg ich wenn ich mir meine Polygone zeichnen lasse Probleme.
1. Die Polygone werden nicht mehr richtig Farblich gefüllt.
2. Der Rechner wird zu sehr belastet und das Programm lagt.
Da ist jetzt die Frage ob es sinnvoll ist polygon puplic zu machen?
Verfasst: 18. März 2008 10:02
von Qt-nator
So das Prinzip Problem ist gelöst.
Danke für die Hilfe.
Für das Detaliertere Problem muss ich mir noch überlegen wie ichs erklären kann. Werde ichs hier mal Posten, oder ich überwinde es selber.