QT产生随机数的问题
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了QT产生随机数的问题相关的知识,希望对你有一定的参考价值。
我做了一个窗口,上面很多LABEL,显示的数学加减题,还有一个按钮,我初始化后(题都是随机数),现在的问题是,我想单击按钮后,题全部变了(都是随机的),这个是我的代码:
void Math_exm::on_gotBtn_clicked()
a1=qrand()%100,b1=qrand()%(100-a1);
a2=qrand()%100,b2=qrand()%100;
a3=qrand()%100,b3=qrand()%100;
a4=qrand()%100,b4=qrand()%a4;
a5=qrand()%100,b5=qrand()%100;
a6=qrand()%100,b6=qrand()%a6;
a7=qrand()%100,b7=qrand()%a7;
a8=qrand()%100,b8=qrand()%100;
a9=qrand()%100,b9=qrand()%a9;
a10=qrand()%100,b10=qrand()%a10;
lb01=new QLabel(tr("%1").arg(a1)+tr("+")+tr("%1").arg(b1)+tr("="));
lb02=new QLabel(tr("%1").arg(a2)+tr("+")+tr("%1").arg(b2)+tr("="));
lb03=new QLabel(tr("%1").arg(a3)+tr("+")+tr("%1").arg(b3)+tr("="));
lb04=new QLabel(tr("%1").arg(a4)+tr("-")+tr("%1").arg(b4)+tr("="));
lb05=new QLabel(tr("%1").arg(a5)+tr("+")+tr("%1").arg(b5)+tr("="));
lb06=new QLabel(tr("%1").arg(a6)+tr("-")+tr("%1").arg(b6)+tr("="));
lb07=new QLabel(tr("%1").arg(a7)+tr("-")+tr("%1").arg(b7)+tr("="));
lb08=new QLabel(tr("%1").arg(a8)+tr("+")+tr("%1").arg(b8)+tr("="));
lb09=new QLabel(tr("%1").arg(a9)+tr("-")+tr("%1").arg(b9)+tr("="));
lb10=new QLabel(tr("%1").arg(a10)+tr("-")+tr("%1").arg(b10)+tr("="));
但是运行时单击后没反应啊!我该怎么办啊?
qsrand(time.msec()+time.second()*100000);
而由于程序执行速度很快,可能会导致循环中两次获取的time是一样的,这样的话产生随机数的种子一样,导致生成的随机数一样。
可以使用:
qsrand(time(0));来生成不同的种子。 参考技术A 没看懂你的意思
你每次都new出来一个新的label 把新生成的随机值放在label上 但却没把label放到页面布局中
建议你在初始化生成label
然后每次在你的slot也就是点击后执行的函数里使用
label->setText(tr("%1).arg(你生成的随机数));
这样你每次点击就题目就会有改变了本回答被提问者和网友采纳 参考技术B 你是不是不熟悉singal/slot机制?
Qt系列文章之三十(基于QThread的线程同步概述)
线程同步的概念
前文已经介绍了QThread的基本用法,以及两种方式的不同的用法和释义,今天说说同步的概念。
在多线程应用程序中,由于多个线程的存在,线程之间可能需要访问同一个变量,或一个线程需要等待另外一个线程完成某个操作后才产生相应的动作。例如,在上一节的实例程序中,工作线程产生随机的骰子点数,主线程读取骰子点数并显示,主线程需要等待工作线程产生一个新的骰子点数后再读取数据。实例程序中使用了信号与槽的机制,在产生新的骰子数之后通过信号通知主线程读取新的数据。
如果不使用信号与槽机制,DiceThread 的run()函数变为如下的代码:
void DiceThread::run()
{
//线程任务
m_stop=false;//启动线程时令m_ stop=false
m_seq
以上是关于QT产生随机数的问题的主要内容,如果未能解决你的问题,请参考以下文章