Qt 对我来说是新的,所以我还不知道所有的习语。我有一个自定义的 linux 驱动程序,它把自己暴露为/dev/mydevice
. 当硬件中发生有趣的事情时,驱动程序会将一些数据写入该文件。我已经测试过这适用于
xxd -l 16 /dev/mydevice
当我按下按钮时,可以看到我的数据被转储到屏幕上。
现在我想要一个简单的 GUI 来向我展示正在转储的内容;QFileSystemWatcher
似乎是一个不错的选择,因为它“监视文件系统以更改文件”,但它不会触发fileChanged
信号。
我猜QFileSystemWatcher
只是在看修改时间或类似的东西?由于QFile
没有实现readyRead
信号,我是否要生成一个新线程并循环QFile::read()
?或者实现我自己的QIODevice
那样做?实现我的目标的最佳方式是什么?
这是玩具示例。
主.cpp:
#include <QCoreApplication>
#include <QDebug>
#include <QFileSystemWatcher>
#include <QString>
class EventTester : public QObject
{
Q_OBJECT
public:
EventTester(QObject *parent = 0) : QObject(parent)
{
qfsw = new QFileSystemWatcher(this);
if (!qfsw->addPath("/dev/mydevice")) {
qDebug() << "Couldn't add watcher.";
}
connect(qfsw, &QFileSystemWatcher::fileChanged,
this, &EventTester::onEvent);
}
QFileSystemWatcher *qfsw;
public slots:
void onEvent(const QString &path)
{
Q_UNUSED(path);
qDebug() << "We got a special event!";
}
};
int main(int argc, char *argv[])
{
QCoreApplication a(argc, argv);
EventTester e();
return a.exec();
}
qfswtestcon.pro:
QT += core
QT -= gui
TARGET = qfswtestcon
CONFIG += console
CONFIG -= app_bundle
TEMPLATE = app
SOURCES += main.cpp