マウス(プレスボタン付き)がタブの上にあるときにアクティブになる必要があります。それはどのように可能ですか。
2 に答える
QTabBar からmouseMoveEventイベントをインターセプトできます。
編集:ハウツー
それをインターセプトするために、Qt は優れた機能を提供します。作成したウィジェットにイベント フィルターをインストールして、その子ウィジェットのフィルター処理されたイベントを取得できるようにすることができます。installEventFilter関数に関するドキュメントを参照してください。
独自の EventFilter を作成するだけです。
// TabBarEventHandler
class TabBarEventHandler : public QObject
{
public:
explicit TabBarEventHandler( QTabWidget * tabWidget );
virtual ~TabBarEventHandler();
void Initialize();
protected:
QTabWidget * mTabWidget;
virtual bool eventFilter( QObject* obj, QEvent* event ) override;
};
// TabBarEventHandler
TabBarEventHandler::TabBarEventHandler( TabBar * tabWidget )
: mTabWidget( tabWidget )
{
}
TabBarEventHandler::~TabBarEventHandler()
{
mTabWidget->tabBar()->removeEventFilter( this );
}
void TabBarEventHandler::Initialize()
{
mTabWidget->tabBar()->installEventFilter( this );
}
bool TabBarEventHandler::eventFilter(QObject* obj, QEvent* event)
{
qDebug() << event->type();
return QObject::eventFilter( obj, event );
}
void TabBarEventHandler::timerEvent(QTimerEvent* event)
{
}
そしてあなたのウィジェットで:
MyTabWidget::MyTabWidget( QWidget * parent ) : QTabWidget( parent )
{
mEventHandler = new TabBarEventHandler( this );
mEventHandler->Initialize();
}
MyTabWidget::~MyTabWidget()
{
delete mEventHandler;
}
デバッグ出力:
QEvent::Type(HoverMove) QEvent::Type(HoverMove) QEvent::Type(MouseButtonPress) QEvent::Type(InputMethodQuery) QEvent::Type(InputMethodQuery) QEvent::Type(InputMethodQuery) QEvent::Type(Paint) QEvent ::Type(Paint) QEvent::Type(MouseButtonRelease) QEvent::Type(HoverMove) QEvent::Type(HoverMove) QEvent::Type(Leave)