에서 이벤트를 발생 알아보기 그렇게?나는 두 개의 클래스가에 대한 다른 클래스
1
A
답변
1
Event filters은 작업을 수행하는 Qt 방법입니다.
WindowManager
클래스를 QObject
의 서브 클래스로 만들고 eventFilter()
메소드 구현을 제공하십시오.
그 다음에 AdaptedWidget
을 만들 때마다 인스턴스를 이벤트 필터로 설치하려면 installEventFilter()
을 사용하십시오.
class WindowManager : public QObject
{
public:
...
bool eventFilter(QObject* obj, QEvent* ev);
private:
std::stack<window_ptr> m_windowsStack;
}
및
bool WindowManager::eventFilter(QObject* obj, QEvent* ev){
AdaptedWidget* widget= qobject_cast<AdaptedWidget*>(obj);
if(ev->type == /*type of event you are interested in*/){
//you can compare widget against the stack of widgets you have
//if you want to stop widget from receiving the event you can return true
}
return false;
}
각
AdaptedWidget
인스턴스를 생성 할 때, 이벤트 필터로
WindowManager
설치 :
AdaptedWidget
클래스 마우스 프레스를 나타내는 신호를 가져야
AdaptedWidget* widget= new AdaptedWidget;
widget->installEventFilter(/*your WindowManager instance*/);
+0
고마워요! 당신이 쓴대로 끝났어! –
1
, 예
class AdaptedWidget : ... {
Q_OBJECT
...
public:
Q_SIGNAL void mousePress(const QPoint &);
};
bool AdaptedWidget::event(QEvent *event)
{
if (event->type() == QEvent::NonClientAreaMouseButtonPress ||
event->type() == QEvent::MouseButtonPress)
{
auto ev = static_cast<QMouseEvent*>(event);
emit mousePress(ev->pos());
qDebug() << "mainwindow press";
}
return QWidget::event(event);
}
또 다른 접근법은 이벤트 필터를 사용하는 것인데, 불필요하게 긴밀하게 두 클래스를 연결합니다.
이벤트 수신 (구독) 또는 다른 이벤트 수신 발생 (게시) 가능. –
@hg_git 제발 좀 도와주세요 –