1

问题

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


潘佳琦
894 声望34 粉丝

为 API 生,为框架死,为 debug 奋斗一辈子;


« 上一篇
QT