Qt で標準入力(stdin)からデータを読み取る方法
別に難しくなかったんですが、なんかハマったのでメモメモ。
単純な方法
QTextStream を使って以下のように処理をする事が可能です。
#include <QtCore/QDebug>
#include <QtCore/QTextStream>
int main(int argc, char **argv)
{
    QTextStream qstdin(stdin);
    while(!qstdin.atEnd()) {
           QString line = qstdin.readLine();
        if (line.isEmpty()) {
            break;
        } else {
            qDebug() << line;
        }   
    }   
    return 0;
}
高度な方法
イベントループを動かしつつ標準入力から読み込む場合は少し工夫が必要です。
#include <QtCore/QCoreApplication>
#include <QtCore/QDebug>
#include <QtCore/QSocketNotifier>
#include <QtCore/QTextStream>
int main(int argc, char **argv)
{
    QCoreApplication app(argc, argv);
    QTextStream qstdin(stdin);
    QSocketNotifier notifier(fileno(stdin), QSocketNotifier::Read);
    QObject::connect(¬ifier, &QSocketNotifier::activated, [&]() {
        while(!qstdin.atEnd()) {
            QString line = qstdin.readLine();
            if (line.isEmpty()) {
                app.quit();
                break;
            } else {
                qDebug() << line;
            }
        }
    });
    return app.exec();
}
ファイルデスクリプタの監視を行うための QSocketNotifier というクラスを使用し、入力があった場合に読み込むようにしています。
