c++ - 如何使用定时器一次使用QTextStream readline

标签 c++

我想使用计时器每秒读取一行文件。定时器启动后,读第一行,一秒后,读第二行……

但是QTextStream中没有读取特定行的函数。关于如何实现这一目标的任何想法?

如果我运行下面的代码,它总是会返回

 QTextStream: no device
 QTextStream: no device
 QTextStream: no device
 QTextStream: no device
timer = new QTimer(this);
connect(timer, SIGNAL(timeout()), this, SLOT(sendmsg()));


void simulatorwindow::on_simON_clicked()
{ 
    simfile = QFileDialog::getOpenFileName(this, tr("Open"),"", tr("Files (*.txt)"));  
    QFile simfile(simfile);
    if (!simfile.open(QIODevice::ReadOnly | QIODevice::Text))
    return; 

    QTextStream textsim(&simfile); 
    timer->start(1000);
    qDebug("Start simulation");
}

void simulatorwindow::on_simOFF_clicked()
{ 
    timer->stop();
    qDebug("Stop simulation");
}

void simulatorwindow::sendmsg()
{ 

    QString line = textsim.readLine();
    QString title = line.section(',', 0,0);
    QString chopped = line.section(',', 1,1);
}

最佳答案

on_simON_clicked 中,您将 textsim 定义为局部变量,并在 sendmsg 中使用同名变量。但它不是同一个变量!

on_simON_clicked 中,您应该改用(显然)成员变量,因为局部变量在函数外不可用。如果您在编译器中打开更多警告,您将收到关于让局部变量“影子”成员/全局变量的警告。

关于c++ - 如何使用定时器一次使用QTextStream readline,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11497860/

相关文章:

c++ - 与访客设计模式实现相关的问题

javascript - 将文件从React.JS前端移动到C++后端

c++ - C/C++ 中 char *(字符指针)的大小会有所不同吗? - 用于数据库列固定大小

c++ - 将 native 缓冲区包装器转换为 C++/CLI

c++ - 从具有通用返回类型的 crtp 基类调用派生类中的函数

c++ - 优化 CPU 流水线和缓存访问

c++ - 它是对函数的引用还是什么?

C++11 将 `auto` Lambda 更改为不同的 Lambda?

c++ - 为什么在这种情况下编译动态库会出错呢?

c++ - 如何打印从总和倒数到 1 的 2 个数字的总和