-1

マウス(プレスボタン付き)がタブの上にあるときにアクティブになる必要があります。それはどのように可能ですか。

4

2 に答える 2

0

QTabBar からmouseMoveEventイベントをインターセプトできます。

編集:ハウツー

それをインターセプトするために、Qt は優れた機能を提供します。作成したウィジェットにイベント フィルターをインストールして、その子ウィジェットのフィルター処理されたイベントを取得できるようにすることができます。installEventFilter関数に関するドキュメントを参照してください。

于 2011-04-20T08:46:01.017 に答える
0

独自の 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)

于 2017-11-07T11:23:22.293 に答える