Qt_GUI_IM_2_3 - 8BitsCoding/RobotMentor GitHub Wiki

목차


QWidget Mouse Event 처리

마우스 처리 등등의 Event를 어떻게 처리하는지 학습한다.

우선 QWidget의 Event처리를 어떻게 하는지 확인해야한다.

QWidget 설명페이지에 가보면 아래와 같이 Protected Functions에 대한 설명이 있다.

그 중 하나인 mousePressEvent를 사용해 보자.

#pragma once

#include <QtWidgets/QWidget>
#include "ui_EventDemo.h"

class EventDemo : public QWidget
{
	Q_OBJECT

public:
	explicit EventDemo(QWidget *parent = Q_NULLPTR);
	~EventDemo() override;

protected:
	void mousePressEvent(QMouseEvent* event) override;
	void mouseReleaseEvent(QMouseEvent* event) override;
	void mouseMoveEvent(QMouseEvent* event) override;


private:
	Ui::EventDemoClass ui;
};
#include "EventDemo.h"
#include <qdebug.h>

EventDemo::EventDemo(QWidget *parent)
	: QWidget(parent)
{
	ui.setupUi(this);
}


EventDemo::~EventDemo()
{

}

void EventDemo::mousePressEvent(QMouseEvent* event)
{
	qDebug() << "Mouse Pressed";
}

void EventDemo::mouseReleaseEvent(QMouseEvent* event)
{
	qDebug() << "Mouse Release";
}

void EventDemo::mouseMoveEvent(QMouseEvent* event)
{
	qDebug() << "Mouse Move";
}

좀 더 event의 상세한 부분을 전시하고 싶다면?

#include "EventDemo.h"
#include <qdebug.h>
#include <qevent.h>

EventDemo::EventDemo(QWidget *parent)
	: QWidget(parent)
{
	ui.setupUi(this);
}


EventDemo::~EventDemo()
{

}

void EventDemo::mousePressEvent(QMouseEvent* event)
{
	qDebug() << "Mouse Pressed" << event->pos();
}

void EventDemo::mouseReleaseEvent(QMouseEvent* event)
{
	qDebug() << "Mouse Release" << event->pos();
}

void EventDemo::mouseMoveEvent(QMouseEvent* event)
{
	qDebug() << "Mouse Move" << event->pos();
}

QWidget Close Event 처리

// .h
void closeEvent(QCloseEvent* event) override;
// .cpp
void EventDemo::closeEvent(QCloseEvent* event)
{
	qDebug() << "Widget about to close";
	event->ignore();		// 화면이 종료되지 않는다.
	// event->accept();
}

매번 Event를 다 외우고 사용해야 할까?

Qt Creator를 사용하면 외우지 않아도 된다.

Qt Creator에서 해당 클래스를 우클릭 후 Refactor -> Insert Virtual Functions of Base Classes로 들어간다.

원하는 클래스를 선택한다.

추가적으로 모르는 부분이 있다면 F1을 누른 후

위와 같이 설명을 참고 할 수 있다.


마우스 우클릭시 메뉴 전시하기

void Widget::contextMenuEvent(QContext* event)
{
	qDebug() << "ContextMenu event";
	QMenu* mMenu = new QMenu(this);
	mMenu->addAction(tr("Action1"));
	mMenu->addAction(tr("Action2"));

	// mMenu->popup(event->pos());
	// 이렇게 전시할 경우 이상한데 메뉴가 뜬다.(윈도우 창 밖에 뜸.)
	mMenu->popup(mapToGlobal(event->pos()));
}

마우스가 다이얼로그 위로 올 경우 (enterEvent)

void enterEvent(QEvent* event) override;

마우스가 다이얼로그 밖으로 나갈 경우 (LeaveEvent)

void LeaveEvent(QEvent* event) override;

기타 등등... 이벤트 처리

⚠️ **GitHub.com Fallback** ⚠️