wie funktioniert das mousePressedEvent?!

Alles rund um die Programmierung mit Qt
Antworten
slash-ex
Beiträge: 239
Registriert: 30. März 2005 21:40

wie funktioniert das mousePressedEvent?!

Beitrag von slash-ex »

Code: Alles auswählen

#ifndef BATTLEFLD_H
#define BATTLEFLD_H

#include <QtGui>
#include <iostream> 

//template <class T>
class QBattlefield : public QWidget
{
private:
	QGraphicsView *battlefield;
	QGraphicsScene *scene;

	//what should be possible?
	void move(QGraphicsItem*);
	void shoot(QGraphicsItem*);
	void melee(QGraphicsItem*);
	void defeat(QGraphicsItem*);

signals:
	//unit moved...

public:
	QBattlefield(QGraphicsScene *scene = 0, QWidget *parent = 0);

public slots:
	void load_scene(QGraphicsScene*);
	QGraphicsItem *getItem_moved();

protected:
	//void dragEnterEvent(QDragEnterEvent *event);
	//void dropEvent(QDropEvent *event);
	void mousePressEvent(QMouseEvent *event);
};

#endif

Code: Alles auswählen

#include "QBattlefield.h"

QBattlefield::QBattlefield(QGraphicsScene *scene, QWidget *parent) : QWidget(parent)
{
	QVBoxLayout *main_layout = new QVBoxLayout(this);

	battlefield = new QGraphicsView;
	battlefield->setInteractive(true);

	QGraphicsScene *foo = new QGraphicsScene;
	foo->addPixmap(*(new QPixmap("/home/dgdaniel/devel/iwars_qt/0.01/bin/images/orks/Ork_Kult_Of_Speed_Deth_Kopta.gif") ) );

	battlefield->setScene(foo);
	main_layout->addWidget(battlefield);
}

//protected:
void QBattlefield::mousePressEvent(QMouseEvent *event)
{
	std::cout<<"moused got pressed"<<std::endl;

	QWidget *child = static_cast<QWidget*>(childAt(event->pos() ) );
	if (!child)
	{
		std::cout<<"no item found"<<std::endl;
		return;
	}
}
wenn ich nun auf das deld klicke passiert nichts, d.h. es wird nichts auf die konsole ausgegeben?! was fehlt denn noch? ich dachte events werden automatsich aufgerufen!

edit:
das beispiel scheint auch nicht zu klappen?!

Code: Alles auswählen

void QBattlefield::mousePressEvent(QMouseEvent *event)
{
	if (QGraphicsItem *item = battlefield->itemAt(event->pos() ) ) 
	{
		qDebug() << "You clicked on item" << item;
	}
	else 
		qDebug() << "You didn't click on an item.";
}
upsala
Beiträge: 3946
Registriert: 5. Februar 2006 20:52
Wohnort: Landshut
Kontaktdaten:

Beitrag von upsala »

Leite nicht vom QWidget ab, sondern gleich vom QGraphicsView, dann dürfte dein Problem verschwinden. (Im Moment verdeckt QGraphicsView dein QWidget, somit kann mousePressEvent vom QWidget nicht aufgerufen werden...)
Antworten