• 3081阅读
  • 12回复

Qt程序中用了QTest::qWait(800);//延迟0.8秒,但是运行exe程序会同时弹出一个DOS窗口 [复制链接]

上一主题 下一主题
离线ustone
 

只看楼主 倒序阅读 楼主  发表于: 2018-05-25

Qt程序中用了QTest::qWait(800);//延迟0.8秒,pro文件加了QT += testlib,但是运行exe程序会同时弹出一个DOS窗口,怎么去掉呢?
离线dbzhang800

只看该作者 1楼 发表于: 2018-05-25
QTest 是用于测试的,控制台是用于输出调试数据的。

换言之,不要在正式代码中使用QTest,要实现延时有很多方法
离线ustone

只看该作者 2楼 发表于: 2018-05-25
我自己写了个Delay函数,不过只能在Windows下了。
离线ustone

只看该作者 3楼 发表于: 2018-05-25
回 dbzhang800 的帖子
dbzhang800:QTest 是用于测试的,控制台是用于输出调试数据的。
换言之,不要在正式代码中使用QTest,要实现延时有很多方法 (2018-05-25 20:57) 

我自己写了个Delay函数,不过只能在Windows下了。
离线dbzhang800

只看该作者 4楼 发表于: 2018-05-28
回 ustone 的帖子
ustone:我自己写了个Delay函数,不过只能在Windows下了。 (2018-05-25 23:56) 

写一个和 QTest::qWait 一样的也不难
离线圣域天子

只看该作者 5楼 发表于: 2018-05-28
QThread::sleep(...)
QThread::msleep(...)
离线dbzhang800

只看该作者 6楼 发表于: 2018-05-28
回 圣域天子 的帖子
圣域天子:QThread::sleep(...)
QThread::msleep(...) (2018-05-28 11:58) 

sleep 和 这个wait还是有区别的,sleep是真的等待,wait只是又启动一个事件循环,
离线ustone

只看该作者 7楼 发表于: 2018-05-28
回 dbzhang800 的帖子
dbzhang800:写一个和 QTest::qWait 一样的也不难 (2018-05-28 11:46) 

能提示一下吗?
离线ustone

只看该作者 8楼 发表于: 2018-05-28
回 圣域天子 的帖子
圣域天子:QThread::sleep(...)
QThread::msleep(...) (2018-05-28 11:58) 

我需要的是等待的时候能处理事件。
离线dbzhang800

只看该作者 9楼 发表于: 2018-05-28
之前的blog,有些话有些过时,不过代码还可以看

https://blog.csdn.net/dbzhang800/article/details/6300425
离线ustone

只看该作者 10楼 发表于: 2018-05-29
回 dbzhang800 的帖子
dbzhang800:之前的blog,有些话有些过时,不过代码还可以看
https://blog.csdn.net/dbzhang800/article/details/6300425 (2018-05-28 20:08) 

谢谢,信息量很大,我参考写了一个Qt自定义延时函数,帮忙看看:
void Wait(int ms)
{
    QElapsedTimer timer;
    timer.start();
    do {
        QCoreApplication::processEvents(QEventLoop::AllEvents, ms);
        #ifdef Q_OS_WIN
            Sleep(1);
        #else
            nanosleep(1);
    } while (timer.elapsed() < ms);
}
离线ustone

只看该作者 11楼 发表于: 2018-05-29
貌似应该:
        #ifdef Q_OS_WIN
            Sleep(1);
        #else
            struct timespec ts = { 0, 1 * 1000 * 1000 };
            nanosleep(&ts, NULL);
离线ustone

只看该作者 12楼 发表于: 2018-05-29
漏了#endif
Qt自定义延时函数:
void Wait(int ms)
{
    QElapsedTimer timer;
    timer.start();
    do {
        QCoreApplication::processEvents(QEventLoop::AllEvents, ms);
        #ifdef Q_OS_WIN
            Sleep(1);
        #else
            struct timespec ts = { 0, 1 * 1000 * 1000 };
            nanosleep(&ts, NULL);
        #endif
    } while (timer.elapsed() < ms);
}
快速回复
限100 字节
 
上一个 下一个