Мне не удалось заставить QSocketNotifier работать с дескриптором файла, активированный сигнал не сработал бы, даже если вход был доступен. Я попытался написать минимальный пример с STDIN_FILENO
, но он все еще не срабатывал.
Заголовочный файл:
#include <QMainWindow>
#include <QSocketNotifier>
#include <unistd.h>
#include <iostream>
QT_BEGIN_NAMESPACE
namespace Ui { class mainWindow; }
QT_END_NAMESPACE
class mainWindow : public QMainWindow{
Q_OBJECT
public:
mainWindow(QWidget *parent = nullptr);
~mainWindow();
private:
Ui::mainWindow *ui;
QSocketNotifier nt;
private slots:
void inputAvailable(int fd);
};
#endif // MAINWINDOW_H
cpp файл:
#include "mainwindow.h"
#include "ui_mainwindow.h"
mainWindow::mainWindow(QWidget *parent) : QMainWindow(parent), ui(new Ui::mainWindow),
nt(STDIN_FILENO, QSocketNotifier::Read, this){
ui->setupUi(this);
connect(&nt, SIGNAL(activated(int)), this, SLOT(inputAvailable(int)));
nt.setEnabled(true);
std::cout << nt.isEnabled() << std::endl;
}
mainWindow::~mainWindow(){
delete ui;
}
void mainWindow::inputAvailable(int fd){
Q_UNUSED(fd)
std::cin.ignore(LONG_MAX);
std::cin.clear();
std::cout << "input" << std::endl;
}