2016-12-16 6 views

答えて

1

Event filtersはあなたの仕事を達成するQtの方法です。

WindowManagerクラスのサブクラスをQObjectとし、そのeventFilter()メソッドの実装を提供してください。

その後、AdaptedWidgetを作成するたびに、WindowManagerインスタンスをイベントフィルタとしてインストールするには、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* widget= new AdaptedWidget; 
widget->installEventFilter(/*your WindowManager instance*/); 
+0

ありがとう!あなたが書いたように完了! –

1

AdaptedWidgetクラスは、マウスプレスを示す信号を有するべきです、例えば

もう1つの方法は、イベントフィルタを使用することですが、不要に厳密に2つのクラスを結合します。

関連する問題