QT lineedit QString字符串

summer_b 2017-11-08 02:02:01
代码:
void MainWindow::showluying(QString text)
{
ui->lineEdit_2->setText(text);//用emit获得到的数值
QString song=ui->lineEdit_2->text();
QString t;
int length=song.length();
for(int i=0;i<=length-1;i++)
{
t=song[i];
Sleep(1000);
ui->lineEdit_3->setText(t);?????
}
}
问题:
我想要让获得到的字符串拆分,得到每个字符,然后逐个输出到lineedit上,但是输出结果是只有最后一个字符输出到lineedit上。
例如:lineedit_2获得字符串是"asd",在lineedit_3输出的只有d。这是为什么呢?
哪位大神帮我看看,这个问题很重要!!!
...全文
864 11 打赏 收藏 转发到动态 举报
写回复
用AI写文章
11 条回复
切换为时间正序
请发表友善的回复…
发表回复
summer_b 2017-11-12
  • 打赏
  • 举报
回复
引用 10 楼 a137748099 的回复:
[quote=引用 9 楼 summer_b 的回复:] 现在的代码: void MainWindow::slot_setLineEditText() { QTimer *timer=new QTimer(this); ui->lineEdit_2->setText(QString(song.at(textIndex))); ++textIndex; if(textIndex == song.count()) { // textIndex = 0; timer->stop(); } } 编译提示说我引用了空指针,timer->stop();是空指针吗?不知道要怎么改,有大神帮我看看吗?万分感激!!!
定时器要全局创建啊,不要放在槽函数里面[/quote] 可以了,谢谢大神,结贴给分!!!
芒果黑 2017-11-11
  • 打赏
  • 举报
回复
引用 9 楼 summer_b 的回复:
现在的代码: void MainWindow::slot_setLineEditText() { QTimer *timer=new QTimer(this); ui->lineEdit_2->setText(QString(song.at(textIndex))); ++textIndex; if(textIndex == song.count()) { // textIndex = 0; timer->stop(); } } 编译提示说我引用了空指针,timer->stop();是空指针吗?不知道要怎么改,有大神帮我看看吗?万分感激!!!
定时器要全局创建啊,不要放在槽函数里面
summer_b 2017-11-10
  • 打赏
  • 举报
回复
现在的代码: void MainWindow::slot_setLineEditText() { QTimer *timer=new QTimer(this); ui->lineEdit_2->setText(QString(song.at(textIndex))); ++textIndex; if(textIndex == song.count()) { // textIndex = 0; timer->stop(); } } 编译提示说我引用了空指针,timer->stop();是空指针吗?不知道要怎么改,有大神帮我看看吗?万分感激!!!
summer_b 2017-11-10
  • 打赏
  • 举报
回复
编辑提示说我引用了空指针,timer->stop();是空指针吗?不知道要怎么改,有大神帮我看看吗?万分感激!!!
summer_b 2017-11-10
  • 打赏
  • 举报
回复
信号与槽参数要对应,信号没传参,那槽函数也没有参数 自定义一个槽函数,在里面对ui->lineEdit_3赋值.把song定义为全局,再定义一个全局的索引textIndex = 0,循环取值赋值。

connect(timer,SIGNAL(timeout()),this,SLOT(slot_setLineEditText());
slot_setLineEditText()
{
ui->lineEdit_3->setText(QString(song.at(textIndex)));
++textIndex;
if(textIndex == song.count())
{
textIndex = 0;
}
}
[/quote] 这样是可以,但是一直在循环,我需要在这个字符最后一个出来的时候就停止,也就是定时器停止,用了下面的代码 if(textIndex == song.count()) { timer->stop(); } 出现运行错误,然后就自己停止运行了?这是为什么啊!
芒果黑 2017-11-08
  • 打赏
  • 举报
回复
引用 4 楼 summer_b 的回复:
[quote=引用 3 楼 a137748099 的回复:] 用定时器吧,你这个用法也是醉了
void MainWindow::showluying(QString text) { QTimer *timer=new QTimer(this); connect(timer,SIGNAL(timeout()),ui->lineEdit_3,SLOT(setText(QString))); ui->lineEdit_2->setText(text); QString song=ui->lineEdit_2->text(); QString t; int length=song.length(); for(int i=0;i<=length-1;i++) { t=song[i]; ui->lineEdit_3->setText(t); timer->start(10000); } } 我改用定时器了,但是显示QObject::connect: Incompatible sender/receiver arguments QTimer::timeout() --> QLineEdit::setText(QString),这要怎么改?[/quote] 信号与槽参数要对应,信号没传参,那槽函数也没有参数 自定义一个槽函数,在里面对ui->lineEdit_3赋值.把song定义为全局,再定义一个全局的索引textIndex = 0,循环取值赋值。

connect(timer,SIGNAL(timeout()),this,SLOT(slot_setLineEditText());
slot_setLineEditText()
{
ui->lineEdit_3->setText(QString(song.at(textIndex)));
++textIndex;
if(textIndex == song.count())
{
textIndex = 0;
}
}
summer_b 2017-11-08
  • 打赏
  • 举报
回复
引用 1 楼 hidxl 的回复:
把你的 Sleep 换成 QCoreApplication::processEvents ( )
怎么替换呢?直接把Sleep(1000)替换成 QCoreApplication::processEvents ( );吗,但是显示 error: 'processEvents' is not a member of 'QCoreApplication'
summer_b 2017-11-08
  • 打赏
  • 举报
回复
引用 3 楼 a137748099 的回复:
用定时器吧,你这个用法也是醉了
void MainWindow::showluying(QString text) { QTimer *timer=new QTimer(this); connect(timer,SIGNAL(timeout()),ui->lineEdit_3,SLOT(setText(QString))); ui->lineEdit_2->setText(text); QString song=ui->lineEdit_2->text(); QString t; int length=song.length(); for(int i=0;i<=length-1;i++) { t=song[i]; ui->lineEdit_3->setText(t); timer->start(10000); } } 我改用定时器了,但是显示QObject::connect: Incompatible sender/receiver arguments QTimer::timeout() --> QLineEdit::setText(QString),这要怎么改?
芒果黑 2017-11-08
  • 打赏
  • 举报
回复
用定时器吧,你这个用法也是醉了
hidxl 2017-11-08
  • 打赏
  • 举报
回复
换了之后再加上 Sleep 吧,不然没延时了,虽然你这种延时不可取.
hidxl 2017-11-08
  • 打赏
  • 举报
回复
把你的 Sleep 换成 QCoreApplication::processEvents ( )

16,211

社区成员

发帖
与我相关
我的任务
社区描述
Qt 是一个跨平台应用程序框架。通过使用 Qt,您可以一次性开发应用程序和用户界面,然后将其部署到多个桌面和嵌入式操作系统,而无需重复编写源代码。
社区管理员
  • Qt
  • 亭台六七座
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧