该实例程序使用 Qt 进行,windows的键盘后台监听,即使 Qt 桌面程序失去焦点在后台运行,也会捕捉到按键事件 这个程序使用windows的钩子(hook)实现的, Qt 官方没有相关的实现 关于编译,我用的是 Qt 5.9.7 MinGW32位,我还用了 Qt 5.6.3MinGW32位,也变过去了, 更换编译环境时候可能会报错,这些问题请百度 我遇到过 声明 的函数提示 已经 声明 了,我就 声明 了一次,没办发, 把 声明 去了,就去可以正常便过去了 还有使用windows系统库的时候可能会链接不上,在*.pro文件里面添加windows系统库就好了 列如: LIBS += -Lc:/xx/xx -lUser32 不要想着别人的代码拿过来就能跑起来,先解决编译问题,这也是在不断地积累 C++中是没有像其他后辈(C# Java)那样,提供枚举 变量 到字符串之间的快捷转换功能的,程序要打印枚举 变量 时,只能额外再写一个转换函数,费时费力,好在, Qt 提供了这个功能,通过Q_ENUM宏和Q_FLAG宏,实现了更多更酷的功能。 QT 5.9.9本来程序运行的很正常,我新加了一个类后保存了一下后就突然显示我有一个 变量 未标识,当时感觉很懵逼,那个 变量 就在.h文件中定义的,用ctrl+鼠标左键也能找到它,而且我也没对它进行修改,怎么就突然变成未标识的了? 而且在那个错误的上方有一些警告: Cxxx:该文件包含不能在当前代码页(936)中表示的字符。请将该文件保存为unicode格式防止数据丢失。 为了解决这个问题我进行了几次尝试: 一、将 QT 中的文本编辑 编码 修改: 具体操作为: QT ->工具->选项->文本编辑器-&gt vs,c++编译代码的时候,遇到很奇怪的问题,明明在前面, 已经 声明 变量 ,编译的时候仍然报 未声明 的标识符错误,定位错误地方,在赋值之前,明明定义过 变量 了啊,非常疑惑,下面贴上代码,火眼金睛的你能不能找到原因:      if (fr = mat.cols() || fr + 1 >= mat.rows()) //return Color::NO; Color ret = Color 然后在编译的时候,报错说什么语法错误。大概看了一下主要是 Qt 将这个结构体的emit函数识别成 Qt 的信号发射关键字emit了。但是这样其他类中的emit、signal、slot又不能用了,要改成Q_EMIT之类的,严重影响使用体验。同事在 Qt 环境下开发,使用第三方库(好像是什么tbb的库)时,里面有这样的一个结构体。它里面提到了一个解决办法。一开始找到的解决办法是。 例如我想实现一个程序,用户先进行登录,登录成功后传递用户账号信息到下一个窗口中。 这就需要我在验证用户登录成功之后,new出下一个窗口,在构造函数中传递参数,注意构造的位置,不要在当前窗口close()后再构造。 MainWindow* mainwindow = new MainWindow(gUserAccount); close(); mainwindow->show(); 因为调用close()会自动销毁窗口类对象。 因为用C++还不够熟练,在报错之后调了好长时间不知道是怎么回事,现在小结一下。在全局类global.h中声名如下:public:实现:编译报错:原因:其实很简单就是,声名的静态 变量 没有初始化。在cpp文件中对静态 变量 进行初始化一下就可以了。...