タイマーを使用して、連続する行の読み取りをトリガすることができます。我々はテキストを表示するQPlainTextEdit
を使用しているので、私たちは、文字列の中に生の行を変換する必要があり
// https://github.com/KubaO/stackoverflown/tree/master/questions/timed-read-44319722
#include <QtWidgets>
class PeriodicReader : public QObject {
Q_OBJECT
QTimer m_timer{this};
QFile m_file{this};
void readLine() {
if (m_file.atEnd()) {
m_timer.stop();
return;
}
emit newLine(m_file.readLine());
}
public:
explicit PeriodicReader(QObject * parent = {}) : QObject(parent) {
connect(&m_timer, &QTimer::timeout, this, &PeriodicReader::readLine);
}
void load(const QString & fileName) {
m_file.close(); // allow re-opening of the file
m_file.setFileName(fileName);
if (m_file.open(QFile::ReadOnly | QFile::Text)) {
readLine();
m_timer.start(300); // 0.3s interval
}
}
Q_SIGNAL void newLine(const QByteArray &);
};
:この機能は、最高のたびに新しいラインが利用可能である信号を発する独自のクラスに分かれています。
QString lineToString(QByteArray line) {
while (line.endsWith('\n') || line.endsWith('\r'))
line.chop(1);
return QString::fromUtf8(line);
}
それはデモに一緒にそれを置くようになりました簡単な問題です:
int main(int argc, char ** argv) {
QApplication app{argc, argv};
QWidget window;
QVBoxLayout layout{&window};
QPushButton load{"Load"};
QPlainTextEdit edit;
layout.addWidget(&load);
layout.addWidget(&edit);
window.show();
PeriodicReader reader;
QObject::connect(&load, &QPushButton::clicked, [&]{
auto name = QFileDialog::getOpenFileName(&window);
if (!name.isEmpty()) {
edit.clear(); // allow re-opening of the file
reader.load(name);
}
});
QObject::connect(&reader, &PeriodicReader::newLine, &edit,
[&](const QByteArray & line){ edit.appendPlainText(lineToString(line)); });
return app.exec();
}
#include "main.moc"
これは完全な例を結論我々はすでに終了段落を追加しますQPlainTextEdit::appendPlainText
ので、任意の改行コードを削除する必要があります。
'readLine'を使用してファイルを読み取るコードを表示します。 'readLine'を呼び出した後にストリームを閉じると、コードが実行されるたびに常に最初の行から開始されます。代わりに、 'EOF'に達する前にストリームを閉じるべきではありません。 – putu
void ReadTextFile :: on_pushButton_4_clicked() QFile textfile( "my_file_here"); if(textfile.open(QIODevice :: ReadOnly)|| QIODevice :: Text) { QTextStream in(&textfile); while(!inEnd()) { QString line = in.readLine(); ui-> textEdit-> append(行); } textfile.close(); qDebug()<< "テキストファイルを閉じる"; } qDebug()<< "プッシュボタンファイル"; } –
申し訳ありませんあなたのようなコードを挿入する方法を知っていません –