QT Service

论坛 期权论坛 编程之家     
选择匿名的用户   2021-6-2 16:19   1877   0

问题

clipboard.png

在使用定义的服务时, 使用Lamada表达式传值没有传过去

clipboard.png

解决

把变量写到.h 的头文件里,就可以传过去。没问题
clipboard.png

clipboard.png

虽然问题已经解决,但是不知道原因(写到.h文件和写到.cpp文件有何区别;欢迎下方评论疑难答惑)

显示到textEdit

预期效果

clipboard.png

实际效果
clipboard.pngclipboard.png

只显示队列的最后一个,但控制台显示的是正常的,更新数据的时候没有在次渲染

1 添加repaint(),进行渲染,数据虽然是一个个显示,但显示速度太快。导致录屏的时候还是只显示最后一个

2 由于显示的太快,加一个sleep()方法让它执行时“睡”一会在执行,可以实现预期效果,但是在进行别的操作是程序会无响应

sleep()方法是使线程停止一段时间的方法。在sleep 时间间隔期满后,线程不一定立即恢复执行。

clipboard.png

思考

clipboard.png

使用for循环每0.3秒请求一下数据,把数据一次性全部请求了,在过0.3秒请求时队列就没数据了所以出现了错误

最终代码

Service:

Service::Service()
{
    srand( static_cast<unsigned int>(time(nullptr)));
    int n=50;
    for(int i=0; i<n; i++)
    {
        queue.enqueue(qrand()%100);
    }
}

QQueue<int> Service::getQueue() {
    return queue;
}

.cpp文件:

   Service *service = new Service();
    queue = service->getQueue();
    // 0.3秒显示一个数
    connect(Timer, &QTimer::timeout,
            [=]()
    {
        if(!queue.empty())
        {
            QString string = QString::number(queue.dequeue());
            ui->textEdit->setText(string);
            repaint();
        }
    }
    );

效果:

clipboard.png

分享到 :
0 人收藏
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

积分:3875789
帖子:775174
精华:0
期权论坛 期权论坛
发布
内容

下载期权论坛手机APP