我正在编写一个带有Qt5 GUI的简单测试应用程序,该应用程序应该能够打开 / dev / input / eventX 文件以读取事件并列出它在Qt UI中找到的事件。我应该说,我基本上没有Qt5的经验,所以我敢肯定,只是Qt有某种方法可以做到这一点,而且我没有正确使用它。
问题是我正在尝试在GUI的QMainWindow类的构造函数中创建的pthread中实现对 / dev / input / eventX 文件的读取。到目前为止,该应用程序可以正常工作,当...通过QtCreator启动该应用程序时,会显示UI,但是当我点击屏幕尝试生成事件时,控制台输出中什么也没有显示显示事件代码的日志消息应该是。
但是,当我从命令行启动应用程序时,因为它首先需要 sudo 权限才能从 / dev / input / eventX 进行读取,它会阻止命令行,并在我点击屏幕时在控制台中按预期显示事件,但是GUI却永远不会显示。
所以看起来pthread阻塞了GUI?在构造函数中,我有以下两行用于创建pthread:
pthread_create(&t_touch, NULL, &touchPoll, NULL);
pthread_join(t_touch, NULL);
其中t_touch是pthread_t
对象,它是主窗口类的成员。 Touch poll是执行轮询的函数,必须将其全局设置为与主窗口类分开,因为如果我将其作为该类的一部分,则使语法正确工作的唯一方法是拥有静态帮助器函数调用touchPoll方法since there is a problem with the this
context when it comes to function pointers。当然,这样做使我的轮询方法无法访问主窗口,如果我想根据引发的事件将信息传递给主窗口...
不幸的是,由于我的团队只能将C ++ 98用于项目,因此不能选择C ++ 11和更高版本。有人知道UI的问题是什么吗? pthread只是阻止了它吗?我应该使用一些内置的Qt类吗?