QApplication和QAbstractNativeEventFilter的多重继承

时间:2015-08-03 08:11:35

标签: qt

我想过滤Qt应用程序中的USB设备插入/删除事件。因此,我需要使用installNativeEventFilter()在我的应用中安装本机偶数过滤器(从QAbstractNativeEventFilter派生)。问题是我需要从我的事件过滤器发出一些信号,并将它们连接到我的应用程序中的插槽。因此,如果我可以同时使用QApplicationQAbstractNativeEventFilter,那么信号和插槽都在同一个类中,连接它们会更方便。但是下面的代码是否安全?

class QApp  : public QApplication, public QAbstractNativeEventFilter
{
    virtual bool nativeEventFilter(const QByteArray &eventType, void *message, long *) Q_DECL_OVERRIDE;
signals:
    void deviceChanged();
    ...
};

QApp a(argc, argv);
a.installNativeEventFilter( &a );

1 个答案:

答案 0 :(得分:4)

为什么要从QApplication派生?要发出信号,您只需从QObject

派生
class NativeEventFilter : public QObject, public QAbstractNativeEventFilter {
  Q_OBJECT
  ...
public:
  Q_SIGNAL void signal1();
  explicit NativeEventFilter(QObject * parent = 0) : QObject(parent) {}
  bool nativeEventFilter(const QByteArray & et, void * msg, long * result) override {
    ...
  };
  ...
};

int main(int argc, char ** argv) {
  QApplication app(argc, argv);
  NativeEventFilter filter;
  app.installNativeEventFilter(&filter);
  ...
  return app.exec();
}