QT中的窗体只有获得焦点的情况下,才会响应按键或鼠标事件(MFC的窗体是否也是如此?)。但是在实际开发过程中,我们常常需要的是即使某些窗体处于失去焦点状态时,也能响应相应的键盘或者鼠标事件。那么,应该如何实现呢?
笔者在遇到这种情况时,首先考虑的还是使用事件监控的方式,但笔者在实际使用中发现,该种方式不是太适合。(主窗体需要监控所有的子窗体并且在监控QAxWidget时情况也很特殊,笔者并未深入研究。)。其次考虑的是将所有的子窗体派生,在派生中传递所有的按键或者鼠标事件至父窗体。很明显,该种方式也不合适。想想为什么?后来,网上有人说用全局热键能够实现,笔者对全局热键没有研究。用了钩子技术来实现的。(windows操作系统)
代码如下.
.h文件
typedef void (MainWidget::*FUNC)(int);
struct ITEM_FUNC
{
int code;
FUNC pFun;
int param;
};
class MainWidget : public QWidget
{
Q_OBJECT
public:
explicit MainWidget(QWidget *parent,QString serverIP,int httpPort,int tcpPort,int udpPort);
~MainWidget();
private:
void test_fuc(int);
void select_main_card(int){};
void select_next_card(int){};
public:
//注册钩子
void register_key_hook();
//释放钩子
vo