Seite 1 von 1

QGroupBox + mousePress

Verfasst: 11. Januar 2010 18:05
von ole
Hallo,

Mal wieder sitze ich vor einem Problem, bei dem ich nicht weiter weiß.
Ich arbeite mit Qt4.5.1 und möchte eine QGroupBox mit einem Label drin. Das funktioniert, nur bekomme ich kein "mousePressEvent". Weiß jemand wieso und was ich tun muss, damit die GroupBox ein solches event empfangen kann?

Code: Alles auswählen

class QtDragItem : public QWidget
{
Q_OBJECT

public:
	QtDragItem(const QString &text, QWidget *parent = 0);

protected:
	virtual void mousePressEvent(QMouseEvent *event);

private:
	QHBoxLayout *	m_layout;
	QHBoxLayout *	m_innerLayout;
	QGroupBox *	m_group;
	QLabel *		m_lblInfo;
};

QtDragItem::QtDragItem(const QString &text, QWidget *parent)
: QWidget(parent)
{
	// create layout
	m_layout = new QHBoxLayout(this);
	m_layout->setSpacing(0);
	m_layout->setContentsMargins(0,0,0,0);

        // create groupbox
	m_group = new QGroupBox(text);

        // the inner layout for the groubox
	m_innerLayout = new QHBoxLayout(m_group);
	m_innerLayout->setSpacing(0);
	m_innerLayout->setContentsMargins(6,8,6,6);
	m_group->setAlignment(Qt::AlignHCenter);
	m_group->setFocusPolicy(Qt::ClickFocus);

	// the info label
	m_lblInfo = new QLabel(text, this);
	m_innerLayout->addWidget(m_lblInfo);
	m_group->setLayout(m_innerLayout);
	m_layout->addWidget(m_group);
}


void QtDragItem::mousePressEvent(QMouseEvent *event)
{
	event->accept();
}
Vielen Dank!

Verfasst: 11. Januar 2010 18:17
von upsala
1. Code formatieren
2. In deiner QGroupBox fängst du überhaupt kein mousePressEvent ab.
3. Woher weist du, daß du kein solches Event bekommst?

Verfasst: 11. Januar 2010 18:22
von ole
1. erledigt.
2. Ja, dass stimmt, ich will einfach das Click event auf mein Objekt "QtDragItem".
3. Ich habe ein Breakpoint in die "mousePressEvent(QMouseEvent *event)" gesetzt. Vorher war in der Klasse nur ein Label, da funktionierte alles tadellos.

Verfasst: 11. Januar 2010 18:54
von upsala
Könnte es sein, daß deine Widgets das QtDragItem komplett ausfüllen und du somit nicht auf das QtDragItem drückst, sondern die darin enthaltenen Widgets?

In diesem Fall must du das mousePressEvent aller darin enthaltenen Widgets abfangen. Und zwar mit dem QObject::eventFilter

Verfasst: 11. Januar 2010 19:04
von ole
Ja, die Widgets füllen das QtDragItem komplett aus. So möchte ich das ja auch. Aber geben die Childwidgets nicht automatisch das MousePressEvent weiter an den parent?

Verfasst: 11. Januar 2010 19:15
von upsala
Nein

Verfasst: 12. Januar 2010 14:09
von ole
Okay, dankeschön!