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