首页 \ 问答 \ 自动刷新QTableWidget可能吗?(Refresh QTableWidget automatically possible?)

自动刷新QTableWidget可能吗?(Refresh QTableWidget automatically possible?)

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,%3\n" )
            .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());
}

QTableWidget(in my code, ipTable) Item come from test_data.txt. But test_data.txt file change in every 3seconds. I want refresh the table automatically..

How can I update QTableWidget automatically..?

This is my code.

#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,%3\n" )
            .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());
}

原文:https://stackoverflow.com/questions/36643037
更新时间:2024-05-02 17:05

最满意答案

'\f'是一个特殊字符(参见转义序列表 )。 在使用硬编码路径时,您应习惯使用r (原始字符串):

os.startfile(r"C:\finished.py")


'\f' is a special character (see Table of escape sequences). You should make it a habit to use r (raw strings) when working with hard-coded paths:

os.startfile(r"C:\finished.py")

相关问答

更多
  • 干得好, string fileToSelect = @"C:\temp.img"; string args = string.Format("/Select, \"{0}\"", fileToSelect); ProcessStartInfo pfi = new ProcessStartInfo("Explorer.exe", args); System.Diagnostics.Process.Start(pfi); 注意:在{0}参数前后添加“ \"可以使fileToSelect字符串包含空格(即“ ...
  • '\f'是一个特殊字符(参见转义序列表 )。 在使用硬编码路径时,您应习惯使用r (原始字符串): os.startfile(r"C:\finished.py") '\f' is a special character (see Table of escape sequences). You should make it a habit to use r (raw strings) when working with hard-coded paths: os.startfile(r"C:\finished. ...
  • 这是错的 char nameFile[strlen(filename)]; 它应该是 char nameFile[1 + strlen(filename)]; 因为strlen()不包含终止的nul字节,所以你的代码仍然非常危险,因为filename可能是NULL ,在这种情况下,因为你从未检查过那么在调用strlen()时会发生未定义的行为。 这个 source[++newLen] = '\0'; /* Just to be safe. */ 证明你知道字符串最后需要'\0' 。 所以你分配的内存少 ...
  • 用于生成时间范围使用pandas : import pandas as pd my_ranges = pd.date_range('2015-07-19', '2015-07-20', freq='5S') 这个例子会输出: In []: my_ranges Out[]: DatetimeIndex(['2015-07-19 00:00:00', '2015-07-19 00:00:05', '2015-07-19 00:00:10', '2015-07-19 00:00:15' ...
  • 你在中途,FileOk事件就是你想要使用的。 您缺少的是将e.Cancel属性设置为true。 这使对话框保持打开状态,避免您不得不一遍又一遍地显示它。 喜欢这个: OpenFileDialog dialog = new OpenFileDialog(); dialog.Filter = "Jpeg files, PDF files, Word files|*.jpg;*.pdf;*.doc;*.docx"; dialog.FileOk += delegate ...
  • def get_my_string(): """Returns the file inputFn""" inputFn = "/home/Documents/text.txt" try: with open(inputFn) as inputFileHandle: return inputFileHandle.read() except IOError: sys.stderr.write( "[myScript] ...
  • 尝试使用run而不是call,你的路径中有一个拼写错误。 subprocess.run(['C:\\Users\\Edvin\\AppData\\Local\\Programs\\Python\\Python35-32\\python.exe', 'C:\\Users\\Edvin\\Desktop\\test.py']) Try to use run instead of call, and you had a typo in your path. subprocess.run(['C:\\Users\ ...
  • 你必须将你的inpath转换为unicode,如下所示: inpath = sys.argv[1] inpath = inpath.decode("UTF-8") filein = open(inpath, "rb") 我猜你使用的是Python 2.6,因为在Python 3中,默认情况下所有字符串都是unicode,所以这个问题不会发生。 You have to convert your inpath to unicode, like this: inpath = sys.argv[1] inpath ...
  • 请注意,存储在jason.json中的数据是dict而不是列表。 所以,如果你想要一个元组列表,你可以做类似的事情 with open('jason.json') as f: data = list(json.load(f).items()) print(data) 产量 [('E(3,5)', 'Persian rhythm'), ('E(3,4)', 'It is the archetypal pattern of the Cumbia from Colombia'), ('E(2,3)', ...
  • 你的文件名字符串中需要双反斜杠。 correctAnswers.open("C:\\CorrectAnswers"); studentAnswers.open("C:\\StudentAnswers"); You'll need double backslashes in your filename strings. correctAnswers.open("C:\\CorrectAnswers"); studentAnswers.open("C:\\StudentAnswers");

相关文章

更多

最新问答

更多
  • sp_updatestats是否导致SQL Server 2005中无法访问表?(Does sp_updatestats cause tables to be inaccessible in SQL Server 2005?)
  • 如何创建一个可以与持续运行的服务交互的CLI,类似于MySQL的shell?(How to create a CLI that can interact with a continuously running service, similar to MySQL's shell?)
  • AESGCM解密失败的MAC(AESGCM decryption failing with MAC)
  • Zurb Foundation 4 - 嵌套网格对齐问题(Zurb Foundation 4 - Nested grid alignment issues)
  • 湖北京山哪里有修平板计算机的
  • SimplePie问题(SimplePie Problem)
  • 在不同的任务中,我们可以同时使用多少“上下文”?(How many 'context' we can use at a time simultaneously in different tasks?)
  • HTML / Javascript:从子目录启用文件夹访问(HTML/Javascript: Enabling folder access from a subdirectory)
  • 为什么我会收到链接错误?(Why do I get a linker error?)
  • 如何正确定义析构函数(How to properly define destructor)
  • 垂直切换菜单打开第3级父级。(Vertical toggle menu 3rd level parent stay opened. jQuery)
  • 类型不匹配 - JavaScript(Type mismatch - JavaScript)
  • 为什么当我将模型传递给我的.Net MVC 4控制器操作时,它坚持在部分更新中使用它?(Why is it that when I pass a Model to my .Net MVC 4 Controller Action it insists on using it in the Partial Update?)
  • 在使用熊猫和statsmodels时拉取变量名称(Pulling variable names when using pandas and statsmodels)
  • 如何开启mysql计划事件
  • 检查数组的总和是否大于最大数,反之亦然javascript(checking if sum of array is greater than max number and vice versa javascript)
  • 使用OpenGL ES绘制轮廓(Drawing Outline with OpenGL ES)
  • java日历格式(java Calendar format)
  • Python PANDAS:将pandas / numpy转换为dask数据框/数组(Python PANDAS: Converting from pandas/numpy to dask dataframe/array)
  • 如何搜索附加在elasticsearch索引中的文档的内容(How to search a content of a document attached in elasticsearch index)
  • LinQ to Entities:做相反的查询(LinQ to Entities: Doing the opposite query)
  • 从ExtJs 4.1商店中删除记录时会触发哪些事件(Which events get fired when a record is removed from ExtJs 4.1 store)
  • 运行javascript后如何截取网页截图[关闭](How to take screenshot of a webpage after running javascript [closed])
  • 如何使用GlassFish打印完整的堆栈跟踪?(How can I print the full stack trace with GlassFish?)
  • 如何获取某个exe应用程序的出站HTTP请求?(how to get the outbound HTTP request of a certain exe application?)
  • 嗨,Android重叠背景片段和膨胀异常(Hi, Android overlapping background fragment and inflate exception)
  • Assimp详细说明typedef(Assimp elaborated type refers to typedef)
  • 初始化继承类中不同对象的列表(initialize list of different objects in inherited class)
  • 使用jquery ajax在gridview行中保存星级评分(Save star rating in a gridview row using jquery ajax)
  • Geoxml3 groundOverlay zIndex(Geoxml3 groundOverlay zIndex)