0

タイマーを使って毎秒1行ずつファイルを読みたい。タイマーが開始したら、最初の行を読み取り、1秒後に、2番目の行を読み取ります......

ただし、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);
}
4

2 に答える 2

1

でローカル変数としてon_simON_clicked定義textsimし、で同じ名前の変数を使用しますsendmsg。しかし、それは同じ変数ではありません!

on_simON_clickedローカル変数は関数の外では使用できないため、代わりに (明らかに) メンバー変数を使用する必要があります。コンパイラでさらに警告をオンにすると、ローカル変数がメンバー/グローバル変数を「シャドウ」することに関する警告が表示されます。

于 2012-07-16T05:37:06.027 に答える
0

タイマー スロットが起動するたびにファイルを開く代わりに、QFile を simulatorwindow のメンバーにします。プログラムの開始時に開き、タイマーが起動するたびに読み取ります。

于 2012-07-16T04:19:52.470 に答える