Qt线程问题,如何在TextEdit上面依次打印0~9且掐面的不消失

时间:2021-10-15 08:05:46
在Qt界面上打印0~9,每个数字打印5次,一个数字占一行,依次往下打印,而且前面的数据不消失,求师傅指点,Qt菜鸟 Qt线程问题,如何在TextEdit上面依次打印0~9且掐面的不消失

16 个解决方案

#1


setText();

#2


我试了的 不行,他只能显示一组数据,而且会把前面的覆盖掉~~~

#3


QString str = QString("%1%2%3%4%5\n").arg(k).arg(k).arg(k).arg(k).arg(k);//这个打包了的 其变化在线程里面实现的,这里只是显示
    ui->textEdit->setText(QString(str));

#4


for(int i=0; i<10; ++i){
    QString text = label->text();
    text.append(QString("%1%1%1%1%1\n").arg(i);
    label->settext(text);
}

#5


关键是要把前面的字符串取出来,然后追加

#6


有点头绪了,如果把循环放在线程里面的话,又怎么办呢?这里的setText只做显示作用!

#7


大哥 谢谢你,线程那个我也搞定了,只是有一点不懂,在label上可以显示,但是TextEdit不能显示 为什么呢?

#8


引用 7 楼 nigoole 的回复:
大哥 谢谢你,线程那个我也搞定了,只是有一点不懂,在label上可以显示,但是TextEdit不能显示 为什么呢?

TextEdit为什么会不能显示呢?
你可以追加一个‘\n’

#9


我之前就是用的TextEdit 能显示,但是感觉他是吧所有线程里面的任务执行完成了,才打印到界面 没有动态的效果,我现在做一个ping的功能!!

#10


大哥 QString text = label->text();这一步我不是很明天他的用途,如果改成
QString text = textEdit->text();的话,没有text()这个,我是新手,请不要见怪问这么2的问题!!

#11


QString str2 = QString("%1 byte from %2: icmp_seq=%3 ttl=%4 rtt=%5 ms\n").arg(length).
            arg(inet_ntoa(from.sin_addr)).arg(icmp->icmp_seq).arg(ip->ip_ttl).arg(rtt);
    QString str5 = QString("There have %1 packets transmitted, %2 received , %3% lost\n").arg(nsend).arg(nreceived).arg((nsend-nreceived)/nsend*100);
    QString str6 = QString("\n--------------------PING statistics-------------------\n");
    QString str1 = QString("PING %1s(%2s): %3 bytes data in ICMP packets.\n\n\n").arg(inet_ntoa(from.sin_addr)).arg(inet_ntoa(from.sin_addr)).arg(datalen);
    QString str3 = ui->OutputLabel->text();
    str3.append(str1).append(str2);
    ui->OutputLabel->setText(str3);
大哥 你帮我看看这个该怎么封装哦 我需要让 str1 显示,接着显示4次str2,然后再显示6,最后显示5,该怎么设置哦 ,我设置的时候 他每次都要打印前面的。

#12


引用 10 楼 nigoole 的回复:
大哥 QString text = label->text();这一步我不是很明天他的用途,如果改成
QString text = textEdit->text();的话,没有text()这个,我是新手,请不要见怪问这么2的问题!!

label->text();返回label的值
textEdit->toPlainText();好像是这个

#13


引用 11 楼 nigoole 的回复:
QString str2 = QString("%1 byte from %2: icmp_seq=%3 ttl=%4 rtt=%5 ms\n").arg(length).
            arg(inet_ntoa(from.sin_addr)).arg(icmp->icmp_seq).arg(ip->ip_ttl).arg(rtt);
    QString str5 = QString("There have %1 packets transmitted, %2 received , %3% lost\n").arg(nsend).arg(nreceived).arg((nsend-nreceived)/nsend*100);
    QString str6 = QString("\n--------------------PING statistics-------------------\n");
    QString str1 = QString("PING %1s(%2s): %3 bytes data in ICMP packets.\n\n\n").arg(inet_ntoa(from.sin_addr)).arg(inet_ntoa(from.sin_addr)).arg(datalen);
    QString str3 = ui->OutputLabel->text();
    str3.append(str1).append(str2);
    ui->OutputLabel->setText(str3);
大哥 你帮我看看这个该怎么封装哦 我需要让 str1 显示,接着显示4次str2,然后再显示6,最后显示5,该怎么设置哦 ,我设置的时候 他每次都要打印前面的。

多用几个label好了。你这看的有点乱啊...

#14


如果多用几个 显示就不在一个界面了?不好看吧?

#15


这个给你说吧  我定义了QString str1,2,3,4,5,
现在是想让他显示1->2->3->4->5;和刚才的那个数字我感觉差别有点大

#16


每次setText之前,先把原来的读出来存着,然后拼接好再setText不行吗

#1


setText();

#2


我试了的 不行,他只能显示一组数据,而且会把前面的覆盖掉~~~

#3


QString str = QString("%1%2%3%4%5\n").arg(k).arg(k).arg(k).arg(k).arg(k);//这个打包了的 其变化在线程里面实现的,这里只是显示
    ui->textEdit->setText(QString(str));

#4


for(int i=0; i<10; ++i){
    QString text = label->text();
    text.append(QString("%1%1%1%1%1\n").arg(i);
    label->settext(text);
}

#5


关键是要把前面的字符串取出来,然后追加

#6


有点头绪了,如果把循环放在线程里面的话,又怎么办呢?这里的setText只做显示作用!

#7


大哥 谢谢你,线程那个我也搞定了,只是有一点不懂,在label上可以显示,但是TextEdit不能显示 为什么呢?

#8


引用 7 楼 nigoole 的回复:
大哥 谢谢你,线程那个我也搞定了,只是有一点不懂,在label上可以显示,但是TextEdit不能显示 为什么呢?

TextEdit为什么会不能显示呢?
你可以追加一个‘\n’

#9


我之前就是用的TextEdit 能显示,但是感觉他是吧所有线程里面的任务执行完成了,才打印到界面 没有动态的效果,我现在做一个ping的功能!!

#10


大哥 QString text = label->text();这一步我不是很明天他的用途,如果改成
QString text = textEdit->text();的话,没有text()这个,我是新手,请不要见怪问这么2的问题!!

#11


QString str2 = QString("%1 byte from %2: icmp_seq=%3 ttl=%4 rtt=%5 ms\n").arg(length).
            arg(inet_ntoa(from.sin_addr)).arg(icmp->icmp_seq).arg(ip->ip_ttl).arg(rtt);
    QString str5 = QString("There have %1 packets transmitted, %2 received , %3% lost\n").arg(nsend).arg(nreceived).arg((nsend-nreceived)/nsend*100);
    QString str6 = QString("\n--------------------PING statistics-------------------\n");
    QString str1 = QString("PING %1s(%2s): %3 bytes data in ICMP packets.\n\n\n").arg(inet_ntoa(from.sin_addr)).arg(inet_ntoa(from.sin_addr)).arg(datalen);
    QString str3 = ui->OutputLabel->text();
    str3.append(str1).append(str2);
    ui->OutputLabel->setText(str3);
大哥 你帮我看看这个该怎么封装哦 我需要让 str1 显示,接着显示4次str2,然后再显示6,最后显示5,该怎么设置哦 ,我设置的时候 他每次都要打印前面的。

#12


引用 10 楼 nigoole 的回复:
大哥 QString text = label->text();这一步我不是很明天他的用途,如果改成
QString text = textEdit->text();的话,没有text()这个,我是新手,请不要见怪问这么2的问题!!

label->text();返回label的值
textEdit->toPlainText();好像是这个

#13


引用 11 楼 nigoole 的回复:
QString str2 = QString("%1 byte from %2: icmp_seq=%3 ttl=%4 rtt=%5 ms\n").arg(length).
            arg(inet_ntoa(from.sin_addr)).arg(icmp->icmp_seq).arg(ip->ip_ttl).arg(rtt);
    QString str5 = QString("There have %1 packets transmitted, %2 received , %3% lost\n").arg(nsend).arg(nreceived).arg((nsend-nreceived)/nsend*100);
    QString str6 = QString("\n--------------------PING statistics-------------------\n");
    QString str1 = QString("PING %1s(%2s): %3 bytes data in ICMP packets.\n\n\n").arg(inet_ntoa(from.sin_addr)).arg(inet_ntoa(from.sin_addr)).arg(datalen);
    QString str3 = ui->OutputLabel->text();
    str3.append(str1).append(str2);
    ui->OutputLabel->setText(str3);
大哥 你帮我看看这个该怎么封装哦 我需要让 str1 显示,接着显示4次str2,然后再显示6,最后显示5,该怎么设置哦 ,我设置的时候 他每次都要打印前面的。

多用几个label好了。你这看的有点乱啊...

#14


如果多用几个 显示就不在一个界面了?不好看吧?

#15


这个给你说吧  我定义了QString str1,2,3,4,5,
现在是想让他显示1->2->3->4->5;和刚才的那个数字我感觉差别有点大

#16


每次setText之前,先把原来的读出来存着,然后拼接好再setText不行吗