QTabWidget::event() override is never called
-
I've subclassed QTabWidget and provided overrides for the event(QEvent*) and mousePressEvent(QMouseEvent*) virtuals, but they are never called.
I know that I can install an event filter to handle those events, but why don't the overrides work?
Here's my class declaration:
class ViewTabs : public QTabWidget { Q_OBJECT public: ViewTabs(QWidget *parent=NULL); virtual ~ViewTabs(); virtual bool event(QEvent *e); virtual void mousePressEvent(QMouseEvent *event); };
and the implementation:
ViewTabs::ViewTabs(QWidget *parent) : QTabWidget(parent) { } ViewTabs::~ViewTabs() { } bool ViewTabs::event(QEvent *e) { std::cout << "ViewTabs::event() event" << std::endl; return QTabWidget::event(e); } void ViewTabs::mousePressEvent(QMouseEvent *event) { Q_UNUSED(event); std::cout << "ViewTabs press" << std::endl; }
EDIT: The overrides are indeed being called correctly. I had assumed they weren't because print statements placed in them were not appearing on the console. That was because I didn't have the 'console' setting in my CONFIG.
-
I've subclassed QTabWidget and provided overrides for the event(QEvent*) and mousePressEvent(QMouseEvent*) virtuals, but they are never called.
I know that I can install an event filter to handle those events, but why don't the overrides work?
Here's my class declaration:
class ViewTabs : public QTabWidget { Q_OBJECT public: ViewTabs(QWidget *parent=NULL); virtual ~ViewTabs(); virtual bool event(QEvent *e); virtual void mousePressEvent(QMouseEvent *event); };
and the implementation:
ViewTabs::ViewTabs(QWidget *parent) : QTabWidget(parent) { } ViewTabs::~ViewTabs() { } bool ViewTabs::event(QEvent *e) { std::cout << "ViewTabs::event() event" << std::endl; return QTabWidget::event(e); } void ViewTabs::mousePressEvent(QMouseEvent *event) { Q_UNUSED(event); std::cout << "ViewTabs press" << std::endl; }
EDIT: The overrides are indeed being called correctly. I had assumed they weren't because print statements placed in them were not appearing on the console. That was because I didn't have the 'console' setting in my CONFIG.
@mayaknife hi, friend, welcome
I tried my Qt and to write test, it can grab mouse click event in subclass
QTabWidget
my snippet code:
head file
#ifndef TABWIDGET_H #define TABWIDGET_H #include <QTabWidget> class TabWidget : public QTabWidget { public: TabWidget(QWidget* parent = 0); protected: void mousePressEvent(QMouseEvent *event) override; }; #endif // TABWIDGET_H
cpp file
#include "tabwidget.h" #include <QtCore/QDebug> TabWidget::TabWidget(QWidget *parent) :QTabWidget(parent) { } void TabWidget::mousePressEvent(QMouseEvent *event) { QTabWidget::mousePressEvent(event); qDebug("....."); }
-
Hi
I can highly recommend to use c++11 keyword override
virtual bool event(QEvent *event) override;
as compiler will then tell you if it overrides nothing and u know something is wrong.
Also to be sure signature ( return type and parameters) is correct, one
can use the menu to insert base class overrides.Right click the class definition ( on the name ) and go to Refactor menu
then you get nice list -
Hi
I can highly recommend to use c++11 keyword override
virtual bool event(QEvent *event) override;
as compiler will then tell you if it overrides nothing and u know something is wrong.
Also to be sure signature ( return type and parameters) is correct, one
can use the menu to insert base class overrides.Right click the class definition ( on the name ) and go to Refactor menu
then you get nice list -
Using such a long Qt IDE, have not found this method. Best way to insert virtual function. Thank you very much.
@joeQ
Well i have been surprised a few times finding a feature that really rocks.
Like
When you add a parameter function and it shows that little lamp in the end.
Press alt+enter to let it change/add the parameter to other file. (.h or .cpp) by itself.In Designer , you can actually drag a widget BACK to the widget list and use it as a template for a given
widget type. So you don't have to set the properties all over. Composite/complex objects also worksThe Refactor right click menu is context sensitive and offer different
menus depending on the text cursor location.
Like standing on a member variable , it offers to create get/set function for it.
(alt + enter also works)and few other little surprises :)
-
@joeQ
Well i have been surprised a few times finding a feature that really rocks.
Like
When you add a parameter function and it shows that little lamp in the end.
Press alt+enter to let it change/add the parameter to other file. (.h or .cpp) by itself.In Designer , you can actually drag a widget BACK to the widget list and use it as a template for a given
widget type. So you don't have to set the properties all over. Composite/complex objects also worksThe Refactor right click menu is context sensitive and offer different
menus depending on the text cursor location.
Like standing on a member variable , it offers to create get/set function for it.
(alt + enter also works)and few other little surprises :)