QRect::contains(QPoint) funktioniert nicht richtig [SOLVED]
Verfasst: 14. Mai 2009 00:54
Hey ho,
ich kapier wieder einmal nicht was vor sich geht, und bräuchte eure Hilfe. Ich möchte eine Art MEmory programmieren, bin jedoch ganz am Anfang und spiele noch ein bisschen rum. Die Karten sind einzelne Widgets und sollen mit einem Mausklick selektiert werden, dazu habe ich einen MouseEvent eingebaut in dem ich die Pos der Maus abfrage. Zum Test habe ich den QPOint den ich für den Mausklick bekomme mit contains(QPoint) auf das QRect irgendeiner Karte(einzelnes Widget) im SPielfeld abgefragt und eine andere gelöscht um zu sehen ob es funktioniert.
Problem ist, egal in welchem QRect von welcher Karte ich den QPoint abfrage, gelöscht wird immer wenn ich auf die erste im Bild klicke.
Das ganze ist schwer zu erklären, hab das Programm beigelegt und die markanten Stellen markiert..
ISt bestimmt ein simpler Fehler, aber der nimmt mir grad schon wieder total die Lust zum weitermachen. Ich hoffe mir kann jemand einen Tipp geben .. vielen DAnk schonmal dafür..
ich kapier wieder einmal nicht was vor sich geht, und bräuchte eure Hilfe. Ich möchte eine Art MEmory programmieren, bin jedoch ganz am Anfang und spiele noch ein bisschen rum. Die Karten sind einzelne Widgets und sollen mit einem Mausklick selektiert werden, dazu habe ich einen MouseEvent eingebaut in dem ich die Pos der Maus abfrage. Zum Test habe ich den QPOint den ich für den Mausklick bekomme mit contains(QPoint) auf das QRect irgendeiner Karte(einzelnes Widget) im SPielfeld abgefragt und eine andere gelöscht um zu sehen ob es funktioniert.
Problem ist, egal in welchem QRect von welcher Karte ich den QPoint abfrage, gelöscht wird immer wenn ich auf die erste im Bild klicke.
Das ganze ist schwer zu erklären, hab das Programm beigelegt und die markanten Stellen markiert..
Code: Alles auswählen
#ifndef PAIRS_H
#define PAIRS_H
#include <QtGui>
#include "pairscard.h"
class Pairs : public QWidget
{
public:
// Methods
Pairs();
QVector<PairsCard*> pairsCards;
void mousePressEvent(QMouseEvent *);
bool findSelectedPairCard(QPoint);
};
#endif // PAIRS_H
-------------------------------------------------------------------------------------
#include "pairs.h"
Pairs::Pairs()
{
QGridLayout *layout=new QGridLayout;
for (int x=0; x<60; x++)
pairsCards.push_back(new PairsCard());
// place pairCards in the pairsWidget
int i=0;
for (int x=0; x<6; x++)
for (int y=0; y<10; y++)
{
layout->addWidget(pairsCards.at(i), x, y);
i++;
}
this->setLayout(layout);
}
void Pairs::mousePressEvent(QMouseEvent *event)
{
QPoint point = event->pos();
if (findSelectedPairCard(point))
delete pairsCards.at(10); // Hier wird irgendeine Karte im BIld gelöscht wenn der geklickte Punkt im agefragten Bereich (unten) liegt**************************************************
}
bool Pairs:: findSelectedPairCard(QPoint point)
{
if (pairsCards.at(5)->rect().contains(point, false)) // HIer ist die Abfrage ob der Punkt im Rechteck enthalten ist******************************************************
return true;
return false; // no pairsCard was selected
}
-------------------------------------------------------------------------------------
#ifndef PAIRSCARD_H
#define PAIRSCARD_H
#include <QtGui>
class PairsCard : public QWidget
{
Q_OBJECT
public:
PairsCard();
~PairsCard();
void paintEvent(QPaintEvent *);
// Attributes
QString *text;
QColor *backgroundColor;
};
#endif // PAIRSCARD_H
-------------------------------------------------------------------------------------
#include "pairscard.h"
PairsCard::PairsCard()
{
}
PairsCard::~PairsCard()
{
}
void PairsCard::paintEvent(QPaintEvent *)
{
QPainter painter(this);
painter.setPen(QPen(Qt::black, 5 ));
painter.setFont(QFont("Arial", 15));
painter.drawText(rect(), Qt::AlignCenter, "Qt");
int side = qMin(width(), height()); // find shorter side of widget
painter.setViewport((width() - side) / 2, (height() - side) / 2, side, side);
painter.drawRect ( 5, 5, width()-10, height()-10 );
}
-------------------------------------------------------------------------------------
#include <QtGui/QApplication>
#include "pairscard.h"
#include "pairs.h"
int main(int argc, char *argv[])
{
QApplication app(argc, argv);
Pairs pairs;
pairs.show();
return app.exec();
}