#qt #qtabwidget
#qt #qtabwidget ( таблица виджетов ) #qtabwidget
Вопрос:
необходимо, чтобы, когда мышь (с нажатой кнопкой) находится поверх вкладки, она активировалась. Как это возможно.
Ответ №1:
Вы можете перехватить событие mouseMoveEvent из QTabBar.
Редактировать: как
Чтобы перехватить его, Qt предлагает вам отличные функциональные возможности. Вы можете установить фильтр событий на созданный вами виджет, чтобы он мог получать отфильтрованные события своих дочерних виджетов. Смотрите документацию о функции installEventFilter.
Комментарии:
1. учитывая, что я относительно умеренный. Как я могу это сделать. Должен ли я создать подкласс qtabbar, подобный примеру droparea в сети. предлагаю. спасибо, что поделились до сих пор.
2. Вы можете создать подкласс QTabBar, но Qt предлагает другое более простое решение для получения события дочернего виджета: смотрите Мой обновленный ответ
Ответ №2:
Просто создайте свой собственный 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 (перемещение в режиме реального времени) QEvent::Type (перемещение в режиме реального времени) QEvent ::Type (нажатие кнопки мыши) QEvent::Type(InputMethod query) QEvent::Type(входной метод запроса) QEvent::Type (входной метод запроса) QEvent::Type (Paint) QEvent::Type (Paint) QEvent::Type(MouseButtonRelease) QEvent ::Type (HoverMove) QEvent ::Type (HoverMove) QEvent :: Type(Оставить)