更新QTableView显示的视图

时间:2012-07-05 11:23:51

标签: qt qtableview

我有一个QTableView小部件,其中填充了QStandardItemModel的帮助。 每两秒钟,使用QTimer调用包含这两个类的函数,然后给出接下来的50个条目。

每两秒钟后该功能正常运行,但在显示的窗口中没有刷新这些值 提前感谢您的帮助。

代码:

void Box::create_frame()
{
        k=0;
        tablegroup = new QGroupBox(tr("Table"));
        QVBoxLayout *layout = new QVBoxLayout;

        table = new QTableView(this);
        table->setUpdatesEnabled(false);

        cout << "recent check" <<endl;
        QStandardItemModel *mode = new QStandardItemModel(1,2,this);
        mode->setHorizontalHeaderItem(0, new QStandardItem(QString("ID")));
        mode->setHorizontalHeaderItem(1, new QStandardItem(QString("DATA")));

        map<int,QString>::iterator it;

        for(it=dataa.begin();it!=dataa.end();it++)
        {
                for(int i=0;i<=1;i++)
                {
                        QStandardItem *item;
                        item = new QStandardItem();
                        item->setEditable(true);
                        if(i==0)
                        {
                                item->setData(((*it).first), Qt::DisplayRole);
                                mode->setItem(k,i,item);
                        }
                        else
                        {
                                item->setData(((*it).second), Qt::DisplayRole);
                                mode->setItem(k,i,item);
                        }
                }
        k++;
        }
        //setUpdatesEnabled(false);
        table->setUpdatesEnabled(true);
        cout << "create frame check" << endl;
        table->setModel(mode);
        layout->addWidget(table);
        tablegroup->setLayout(layout);
}

QTimer *timer = new QTimer(this);
        connect(timer, SIGNAL(timeout()), this, SLOT(refresh()));
        timer->start(2000);
}

void dataThread::run()
{
        boost::posix_time::seconds delay(2);

        int g=0;
        int h=50;

        while(1)
        {
                while(g<h)
                {
                        dataa.insert(pair<int,QString>(g+1,"HELLO"));
                        g++;
                }
                boost::this_thread::sleep(delay);
                h=h+50;
        }

}

1 个答案:

答案 0 :(得分:0)

首先,它已经很晚了,所以也许我忽略了一些东西,但是从你的运行循环开始,看起来你实际上并没有将任何数据添加到你的表模型中,而只是你只是在你的{{1}中添加条目} vector / list。

也许您应该将此添加到您的运行循环

dataa

又迟到但我觉得你明白了。您目前没有更改表格设置的模型,而只是更改while( g < h ) { dataa.insert(pair<int,QString>(g+1,"HELLO")); QStandardItem *item; item = new QStandardItem(); item->setEditable(true); item->setData( g+1, Qt::DisplayRole ); // You need the model here table->model()->setItem( h + g, 0, item ); item = new QStandardItem(); item->setData( "Hello", Qt::DisplayRole ); // You need the model again here table->model->setItem( h + g, 1, item ); ++g; } 向量/列表。