1、单例模式现实
public:
static ControlProbe* GetInstance();
private:
static ControlProbe* mControlProbe;
ControlProbe *ControlProbe::GetInstance()
{
if(mControlProbe == nullptr) {
mControlProbe = new ControlProbe();
}
return mControlProbe;
}
2、设置按键监听并触发事件
头文件
#ifndef KEYBOARDEVENTFILTER_H
#define KEYBOARDEVENTFILTER_H
#include <QObject>
class KeyboardEventFilter : public QObject
{
Q_OBJECT
public:
explicit KeyboardEventFilter(QObject *parent = nullptr);
protected:
bool eventFilter(QObject *obj, QEvent *event) override;
};
#endif // KEYBOARDEVENTFILTER_H
源文件
#include "keyboardeventfilter.h"
#include <QEvent>
#include <QKeyEvent>
#include <QDebug>
KeyboardEventFilter::KeyboardEventFilter(QObject *parent) : QObject(parent)
{
}
bool KeyboardEventFilter::eventFilter(QObject *obj, QEvent *event)
{
if (event->type() == QEvent::KeyPress)
{
QKeyEvent *keyEvent = static_cast<QKeyEvent *>(event);
qDebug() << "Key pressed:" << keyEvent->text();
// 在这里执行您想要的按键操作
return true; // 停止事件传递
}
return QObject::eventFilter(obj, event);
}
main函数
#include <QCoreApplication>
#include "keyboardeventfilter.h"
int main(int argc, char *argv[])
{
QCoreApplication a(argc, argv);
// 创建事件过滤器
KeyboardEventFilter *eventFilter = new KeyboardEventFilter(&a);
// 安装事件过滤器
QCoreApplication::instance()->installEventFilter(eventFilter);
return a.exec();
}
在这个示例中,KeyboardEventFilter 类的声明在 keyboardeventfilter.h 中,定义在keyboardeventfilter.cpp 中。主程序逻辑在 main.cpp 中。
现在,当您运行这个程序时,按下任何键盘按键,您将在控制台上看到按键的文本内容。您可以在 eventFilter 函数中添加更多按键操作的逻辑。
3、屏蔽自动重复触发
void keyPressEvent(QKeyEvent *event) override
{
if (event->isAutoRepeat())
return;
}