可以自动刷新QTableWidget

Refresh QTableWidget automatically possible?

本文关键字:刷新 QTableWidget      更新时间:2023-10-16

QTableWidget(在我的代码中,ipTable)项来自test_data.txt。但是test_data.txt文件每隔3秒就会更改一次。我想自动刷新表格。。

如何自动更新QTableWidget。。?

这是我的密码。

#include "dialog.h"
#include "ui_dialog.h"
#include "addip.h"
#include <QFile>
Dialog::Dialog(QWidget *parent) :
    QDialog(parent),
    ui(new Ui::Dialog)
{
    ui->setupUi(this);
    timer = new QTimer(this);
    connect(timer, SIGNAL(timeout()), this, SLOT(onTimer()));
    timer->start(1000);
    setWindowTitle( "IP List" );
    ui->ipTable->setColumnCount(3);
    refresh_table();
}
Dialog::~Dialog()
{
    delete ui;
}

QStringList Dialog::refresh_table()
{
    int field;
    QFile file( "/home/yein/widget/test_data.txt" );
    QStringList title;
    title << "IP" << "Protocol" << "state";
    file.open( QIODevice::ReadOnly);
    QTextStream read(&file);
    ui->ipTable->clear();
    ui->ipTable->setRowCount(0);
    ui->ipTable->setHorizontalHeaderLabels(title);
    while(!read.atEnd())
    {
        QString tmp = read.readLine();
        QStringList tmpList = tmp.split( "," );
        ui->ipTable->insertRow(ui->ipTable->rowCount());
        field = ui->ipTable->rowCount() - 1;
        ui->ipTable->setItem( field, IP, new QTableWidgetItem( tmpList[0] ) );
        ui->ipTable->setItem( field, PROTOCOL, new QTableWidgetItem( tmpList[1] ) );
        ui->ipTable->setItem( field, STATE, new QTableWidgetItem( tmpList[2] ) );
    }
    file.close();
    return table;
}
void Dialog::on_btnAdd_clicked()
{
    QString protocol;
    QString IP;
    int res;
    addIP add(this);
    add.setWindowTitle( "Add IP" );
    res = add.exec();
    if( res == QDialog::Rejected )
        return;
    IP = add.getIP();
    protocol = add.getProtocol();
    qDebug() << "IP :" << " " << IP;
    qDebug() << "Protocol : " << " " << protocol;
    write_on_file( IP,protocol );
}
void Dialog::write_on_file( QString IP, QString protocol )
{
    QFile file( "/home/yein/widget/test_data.txt" );
    file.open( QIODevice::Append );
    data[0] = IP;
    data[1] = protocol;
    data[2] = "0";        // init state 0
    QString _str = QString( "%1,%2,%3n" )
            .arg( data[0] )
            .arg( data[1] )
            .arg( data[2] );
    qDebug() << _str << " ";
    QByteArray str;
    str.append(_str);
    file.write(str);
    file.close();
    refresh_table();
}

void Dialog::on_btnClose_clicked()
{
    this->close();
}
void Dialog::onTimer()
{
    updateRStatusBar();
}
void Dialog::updateRStatusBar()
{
    QDateTime local(QDateTime::currentDateTime());
    ui->clock->setText(local.toString());
}

一个选项是使用

QFileSystemWatcher::fileChanged(const QString &path)

并且每当文件被修改时接收信号。此建议取决于更改文件的频率以及您希望查看的文件数量。