Qt 포커스 이벤트
이전 글
Qt의 이벤트 모델에서 제공하는 이벤트 필터 기능은 한 QObject 대상이 다른 QObject 대상의 이벤트를 감시할 수 있도록 한다. 한 QObject 대상에 이벤트 필터를 설치하면 이벤트가 이 대상에 도착하기 전에 이벤트를 포착하여 이 대상의 이벤트를 감시하는 효과를 낼 수 있다.
유사한 기능을 실현하는 또 다른 방식은 각각 다른 컨트롤러 종류를 계승하고 각 컨트롤러의 이벤트 응답 함수를 재구성하는 것이다. 그러나 창에 대량의 다른 컨트롤러가 포함될 때 모든 컨트롤러는 반드시 다시 계승한 다음에 각각 다른 이벤트 함수를 재구성해야 하기 때문에 비교적 복잡하다.이벤트 필터는 창에서 모든 컨트롤의 다른 이벤트를 감시할 수 있으며 기능 확장을 편리하게 할 수 있습니다.
http://www.cnblogs.com/hicjiajia/archive/2012/05/30/2526776.html
#ifndef WIDGET_H
#define WIDGET_H
#include <QWidget>
namespace Ui {
class Widget;
}
class Widget : public QWidget
{
Q_OBJECT
public:
explicit Widget(QWidget *parent = 0);
~Widget();
public slots:
bool eventFilter(QObject *,QEvent *); //
private:
Ui::Widget *ui;
};
#endif // WIDGET_H
`
#include "widget.h"
#include "ui_widget.h"
#include <QPalette>
Widget::Widget(QWidget *parent) :
QWidget(parent),
ui(new Ui::Widget)
{
ui->setupUi(this);
ui->lineEdit1->installEventFilter(this); // lineEdit1
ui->lineEdit2->installEventFilter(this); // lineEdit2
}
Widget::~Widget()
{
delete ui;
}
bool Widget::eventFilter(QObject *watched, QEvent *event)
{
if (watched==ui->lineEdit1) // ( lineEdit1)
{
if (event->type()==QEvent::FocusIn) // ( )
{
QPalette p=QPalette();
p.setColor(QPalette::Base,Qt::green);
ui->lineEdit1->setPalette(p);
}
else if (event->type()==QEvent::FocusOut) // lineEdit1
{
QPalette p=QPalette();
p.setColor(QPalette::Base,Qt::white);
ui->lineEdit1->setPalette(p);
}
}
if (watched==ui->lineEdit2) // lineEdit2 , lineEdit1
{
if (event->type()==QEvent::FocusIn)
{
QPalette p=QPalette();
p.setColor(QPalette::Base,Qt::green);
ui->lineEdit2->setPalette(p);
}
else if (event->type()==QEvent::FocusOut)
{
QPalette p=QPalette();
p.setColor(QPalette::Base,Qt::white);
ui->lineEdit2->setPalette(p);
}
}
return QWidget::eventFilter(watched,event); //
}
또한 한 책에서 저자의 한 예는 동적 단추에 관한 것이다. 마우스를 누르지 않았을 때 아무런 반응이 없고 마우스 왼쪽 단추를 눌렀을 때 그림이 커지고 마우스를 놓은 후에 원래의 상태로 돌아간다.사실 이 효과는 나의 이 예와 일리가 있다. 즉, 감청 단추를 누르는 이벤트 (QEvent:::Mouse Button Press) 와 방출 이벤트 (QEvent::Mouse Button Release) 이다.
bool EventFilter::eventFilter(QObject *watched,QEvent *event)
{
if (watched==Label1)
{
if (event->type()==QEvent::MouseButtonPress)
{
QMouseEvent *mouseEvent=static_cast<QMouseEvent *>event;
if (mouseEvent->buttons() && Qt::LeftButton)
{ // ..........
}
if (event->type()==QEvent::MouseButtonRelease)
{ // ...........
}
return QWidget::eventFilter(watched,event);
}
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
Application Development in WebOSDevelop applications in WebOS Recognize the abstract class Application The operating system accepts classes that impleme...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.