1

我有一个QTableView小部件,它在QStandardItemModel. 在每两秒钟内,包含这两个类的函数被调用 usingQTimer并给出接下来的 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;
        }

}
4

1 回答 1

0

首先,这里已经很晚了,所以也许我忽略了一些东西,但是从你的运行循环来看,看起来你实际上并没有将任何数据添加到表的模型中,而只是将条目添加到你的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;
}

再晚了,但我想你明白了。您当前没有更改您的表格设置的模型,而只是更改您的dataa向量/列表。

于 2012-07-06T21:20:24.643 回答