ジョブの実行中に更新されるログファイルがあります。私は、テキストブラウザにテキストコンテンツを表示し、それを動的に更新する必要があります。ファイルからQTialBrowserを動的に更新する(別のジョブによって更新される)
.hファイル
public:
void fillloginfo();
void initializeQTimer();
void closeEvent(QCloseEvent *event);
void fillLogInfoChronically(const QString& logFilePath);
private:
QTimer* m_Timer;
QString m_logFilePath;
std::ifstream m_logFileStream;
public slots:
void fillLogInfoChronicallySlot();
.cppファイル
void logdialog::initializeQTimer(){
m_Timer = NULL;
//create the timer object
m_Timer = new QTimer(this);
QObject::connect(m_Timer,SIGNAL(timeout()), this,SLOT(fillLogInfoChronicallySlot()));
}
void logdialog::closeEvent(QCloseEvent *event)
{
m_Timer->stop();
if (m_logFileStream.is_open()){
m_logFileStream.close();
}
}
void logdialog::fillLogInfoChronically(const QString &logFilePath)
{
uilog->textBrowser->clear();
m_LastLinePos = 0;
m_logFilePath = logFilePath;
std::string m_logFilePathStr= m_logFilePath.toStdString();
m_logFileStream.open(m_logFilePathStr.c_str());
if (m_logFileStream.is_open()){
fillloginfo();
m_Timer->start(1000);
}
}
void logdialog::fillloginfo()
{
std::string line;
while (getline(m_logFileStream,line)){
uilog->textBrowser->append(QString::fromStdString(line));
}
}
void logdialog::fillLogInfoChronicallySlot()
{
fillloginfo();
}
だから、私は、取得するためのコールの残りの最初の呼び出しでのみファイルを読み取ることができていますファイルからの更新が機能していません。あなたが最初の読み取り後、入力ストリームでstd::ios::clear()
を呼び出す必要があり、事前
にありますか? – perencia
私は生成されたログを制御できません。ツールからジョブを起動し、ログファイルを更新します。 –
次に、ログが更新されていますか? 'getline'がブロックされているので、あなたは無期限に待つことができます。 – perencia