1

QTableViewの助けを借りて満たされたウィジェットがありQStandardItemModelます。2 秒ごとに、これら 2 つのクラスを含む関数が using で呼び出されQTimer、次の 50 エントリが与えられます。

関数は 2 秒ごとに正しく実行されますが、表示されたウィンドウで値が更新されません。
助けてくれてありがとう。

コード :

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 に答える