qt定时器启动不了啊,如何解决?



Didlog::Didlog(QWidget* parent):QDialog(parent)
{
  
    ui.setupUi(this);
  
    QTimer *fTimer = new QTimer(this);
    fTimer->stop();
    fTimer->setInterval(1000);
    connect(fTimer, SIGNAL(timeout()), this, SLOT(on_timer_timeout()));
     connect(ui.btnStart, SIGNAL(clicked()),this, SLOT(on_btnStart_clicked()));
     connect(ui.btnStop, SIGNAL(clicked()), ui.LabElapsTime, SLOT(on_btnStop_clicked()));
}



void Didlog::on_timer_timeout()
{
  
    QTime curTime = QTime::currentTime();
    ui.LCDHour->display(curTime.hour());
    ui.LCDMin->display(curTime.minute());
    ui.LCDSec->display(curTime.second());
    int va = ui.progressBar->value();
    va++;
    while (va > 100)
    {
        va = 0;
        ui.progressBar->setValue(va);
    }
}

void Didlog::on_btnStart_clicked()
{
    fTimer->start();
    fTimeCounter.start();
    ui.btnStart->setEnabled(false);
    ui.btnStop->setEnabled(true);

}

void Didlog::on_btnStop_clicked()
{
    std::cout << "看的到吗" <stop();
    int tmMsec = fTimeCounter.elapsed();
    int ms = tmMsec % 1000;
    int sec = tmMsec/1000;
    QString str = QString::asprintf("看的到吗?");//("流逝时间为: %d 秒, %d 毫秒",sec, ms);
    ui.LabElapsTime->setText(str);
    ui.btnStart->setEnabled(true);
    ui.btnStop->setEnabled(false);

}
Didlog::~Didlog()
{
    delete(fTimer);
}
`


```}

参考GPT和自己的思路:根据您提供的代码,在 Didlog 类的构造函数中,您创建了一个 QTimer 对象 fTimer,但是您在定义 Didlog 类的成员函数 on_btnStart_clicked() 和 on_btnStop_clicked() 中使用的 fTimer 变量与类成员变量 fTimer 不同,导致 fTimer 无法启动。您需要将 fTimer 定义为类的成员变量,修改 Didlog 类的构造函数如下:

Didlog::Didlog(QWidget* parent) : QDialog(parent)
{
    ui.setupUi(this);

    fTimer = new QTimer(this);
    fTimer->stop();
    fTimer->setInterval(1000);
    connect(fTimer, SIGNAL(timeout()), this, SLOT(on_timer_timeout()));
    connect(ui.btnStart, SIGNAL(clicked()), this, SLOT(on_btnStart_clicked()));
    connect(ui.btnStop, SIGNAL(clicked()), ui.LabElapsTime, SLOT(on_btnStop_clicked()));
}

值得注意的是,修改后的 Didlog 声明了一个 QTimer 成员变量 fTimer,可以在 Didlog 类中的任何成员函数中访问它。

另外,您的 while 循环可能会导致程序陷入死循环,建议将它改为 if 语句:

if (va > 100)
{
    va = 0;
}
ui.progressBar->setValue(va);
va++;
不知道你这个问题是否已经解决, 如果还没有解决的话:
  • 你可以参考下这个问题的回答, 看看是否对你有帮助, 链接: https://ask.csdn.net/questions/1063771
  • 这篇博客你也可以参考下:QT常见错误及解决方法
  • 这篇博客也不错, 你可以看下QT常见错误及解决方法
  • 除此之外, 这篇博客: Qt之实现自定义树状图控件中的 一、简述 部分也许能够解决你的问题, 你可以仔细阅读以下内容或者直接跳转源博客中阅读:

    这是好久之前做的一个树控件,挺好玩的就拿出来分享一下.
    代码的主要思路是是通过一个ListWidget和一个自定义的Widget进行组合成为一个节点,然后多个这样的控件进行组合,类似树控件的一个展示效果。

    在这里插入图片描述 在这里插入图片描述

    通过这个控件可以做成QQ好友列表的效果,之前有做过一版QQ列表,已经做完了,可惜代码找不到了…
    不过只需要修改这两个控件就可以做成QQ好友列表的样子了,如果代码找到了,到时候可以在群里分享一下。
    在这里插入图片描述


如果你已经解决了该问题, 非常希望你能够分享一下解决方案, 写成博客, 将相关链接放在评论区, 以帮助更多的人 ^-^