我构建了一个程序, 进行一些用户测试, 并且需要记录关于他们正在做什么的数据, 间隔极小( 每10米 ) 。 大多数数据都可以从 QT 中找到, 但不幸的是我需要使用一个单独的程序来计算鼠标的移动( 即使鼠标已经击中屏幕边缘, 我也需要移动, 但是 QT 忽略了屏幕外的移动 ) 。
因此,我建立了一个窗口程序,处理低水平鼠标输入和输出所检测到的坐标变化。然而,问题在于我无法从窗口程序获取数据,使其与主程序输出相匹配。
在我的主要程序里,我使用以下代码。
mouseTracker = new QProcess();
mouseTracker->start("C:\WindowsFun.exe",QIODevice::ReadWrite|QIODevice::Unbuffered);
mouseTracker->setProcessChannelMode(QProcess::MergedChannels);
connect(mouseTracker,SIGNAL(readyRead()), this, SLOT(readMouseData()),Qt::DirectConnection);
和读取MouseData 函数看起来像这个 。
void HideWindow::readMouseData(){
QByteArray data = mouseTracker->readAll();
QString text = QString(data);
saveFileStream << text.toStdString();
}
有些东西可能是不必要的。我添加到“ 混凝土通道” 模式和“ 直接连接” 模式中, 试图解决问题 。
我得到的结果是窗口程序的输出在每100米左右的大块区域中出现, 而不是在文件流中插入, 而不是当它发生时插入。 它似乎有一个需要填充的缓冲, 或者在待发Read () 信号处理前出现延迟 。 有人建议我如何实时从主程序和 Process 获得输出吗? (至少延迟不到 10 分钟 ) 。
此外,如果重要的话,我正在运行 Windows 7, 并使用 MinGW 来编集主程序, 用于检测鼠标运动的窗口程序2008年视觉工作室。 窗口中的输出是这样的 :
int xPosRelative = raw->data.mouse.lLastX;
int yPosRelative = raw->data.mouse.lLastY;
char output[100];
int n;
n = std::sprintf(output,"%d %d",xPosRelative,yPosRelative);
std::printf("%s
",output,n);
std::fflush(0);
如果还需要信息,请告诉我。
Thanks, -Keilan