在一段时间内更改标签文本
Change label text for some duration
我的标签中有一些文本,现在我想更改该文本 1 分钟,然后返回到旧文本。
在我的构造函数中,我做到了:
ui->lbl->setText("Original text");
timer = new QTimer(this);
connect(timer, SIGNAL(timeout()), this, SLOT(atTime()));
timer->setInterval(1000);
timer->setSingleShot(false);
timer->start();
在我的atTime((函数中:
...
text="Different text";
QTimer::singleShot(60000, this, SLOT(changeText()));
...
和changeText((函数:
void MainWindow::changeText()
{
ui->lbl->setText(text);
}
使用此代码,我可以在特定时间更改文本,但它保持不变。如何使该文本存在 1 分钟,然后再次更改为原始文本?
您可以使用这样的简单函数:
void change(QLabel * label, const QString & text, int ms_keep = 60000, int ms_after = 0)
{
QString originaltext = label->text();
QTimer::singleShot(ms_after, [=](){
label->setText(text);
QTimer::singleShot(ms_keep, [=](){
label->setText(originaltext);
});
});
}
在以下示例中,临时文本将在五秒后设置,原始文本将在十秒后恢复。
ui->lbl->setText("original text");
change(ui->lbl, "temporary text", 10000, 5000);
如果要立即设置临时文本,请省略最后一个参数(默认为零(:
change(ui->lbl, "temporary text", 10000);
显然,您已经触发了计时器更改为新文本,但是您没有将文本值恢复为原始文本,因此即使计时器超时将再次触发,在60000ms之后,文本仍保留在"不同文本"上。 简而言之,您需要每次更改文本值,执行超时函数,在您的情况下更改文本函数。例如,一些基本解决方案,您可以进一步改进:
void MainWindow::changeText()
{
if (text == newValue) // lets say newValue = "Different text"
text = oldValue; // lets say oldValue = "Original text"
else
text = newValue;
ui->lbl->setText(text);
}
相关文章:
- 无法将行编辑中的文本打印到 Qt C++ 中的标签
- win32 c++ 我想在静态标签的文本之后直接插入一个 EDIT 控件
- QT 标签 setText() 同时保留文本格式
- 在一段时间内更改标签文本
- 如何从另一个QML文件更改标签文本
- 当我将鼠标悬停在qt中的不同按钮上时,如何更改标签文本
- 在C ++中,当手指在触摸屏上移动时如何更改标签文本
- Qt 更改其他类的标签文本
- 标签文本更改时如何发出信号
- 无法加速形成标签文本
- 如何更改在不同线程中打开的表单的标签文本
- 更改Form.h之外的表单标签文本
- 根据组合框中所选项目设置标签文本 (QT/C++)
- 更新标签文本 GTK+ C++
- 更改其他类的标签文本
- 如何使用Blackberry 10中的Cascades中的Qt/qml/C++将一个qml文件中的标签文本从另一个qml
- 使用Qt信号和插槽更改另一个类的标签文本
- Qt GUI设计-是否有一个不可见的字符适合标签文本
- Cocos2d-x标签文本字符间距
- 在Qt中设置线程中的小部件标签文本