QFileSystemWatcher应该与设备节点一起使用吗?

时间:2014-12-09 00:51:28

标签: c++ qt linux-device-driver qt5 qfilesystemwatcher

Qt对我来说是新的,所以我还不知道所有的习语。我有一个自定义Linux驱动程序,它将自己公开为/dev/mydevice。当硬件中发生一些有趣的事情时,驱动程序会将一些数据写入该文件。我已经测试过这适用于

xxd -l 16 /dev/mydevice

并且当我按下按钮时可以看到我的数据被转储到屏幕上。

现在我想要一个简单的GUI来告诉我什么被倾倒了; QFileSystemWatcher似乎是一个很好的候选者,因为它会监视文件系统中文件的更改,"但它并没有触发fileChanged信号。

我猜QFileSystemWatcher只是在看修改时间或类似的事情?由于QFile没有实现readyRead信号,我是不是要生成一个新线程并在QFile::read()上循环?或者实现我自己的QIODevice那样做?什么是实现目标的最佳方式?

这是玩具示例。

main.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

0 个答案:

没有答案