首页 > 解决方案 > QApplication 事件循环中无法解释的时间偏移

问题描述

我目前正在使用一个实时预测卫星位置的程序。类似的东西。底层库使用系统时间作为输入。

time_t now(time(0));

当我使用 Qt Creator 在 C++ 控制台应用程序上运行该程序时,该程序可以准确预测卫星的实时位置。

问题是当我在一个成熟的 Qt Gui 应用程序中使用它时,主函数中有一个 QApplication 对象。在程序中,预测函数是由定时器事件函数周期性的。这样我每 2 秒更新一次位置。不幸的是,输出不匹配(在 GUI 上或在我打印时)。就像轨道传播器在计算卫星位置时使用不同的时间一样。

void TrackingManager::timerEvent(QTimerEvent *event)
    {
    int nNumSats = m_Satellites.size() ;
    //std::cout << __func__ << " - Number of satellites = " << nNumSats << std::endl;
    std::vector<SatPosition> vSatPositions;

    if (nNumSats >= 0)
    {
        time_t now(time(0));
        std::cout << __func__ << "time(0) = " << asctime(gmtime(&now)) << std::endl;
        for(int i = 0; i < nNumSats; i++)
        {
            // Get satellite names and calculate position, altitude etc
            SatPosition spPos;
            GetInstantPredict(m_Satellites[i], now, spPos);
           

            vSatPositions.push_back(spPos);
        }
        emit UpdateSatPosition(vSatPositions);
    }
}

更令人困惑的是,当我运行调试器(Ubuntu 上的 GDB)时,程序运行良好。就好像 GDB 以某种方式设法“解决”了这个问题。这有道理吗?

标签: qtqt5

解决方案


推荐阅读