0

qstringlist の項目を複数列のツリービューに追加したいのですが、データが大きすぎたり、データの到着率が高くなったりすると、qtreeview が応答しなくなり、大量のメモリを消費します。

smodel =new QStandardItemModel(1,8,this);
smodel->setHeaderData(0,Qt::Horizontal,QObject::tr("Num"));
smodel->setHeaderData(1,Qt::Horizontal,QObject::tr("Time"));
smodel->setHeaderData(2,Qt::Horizontal,QObject::tr("Length"));
smodel->setHeaderData(3,Qt::Horizontal,QObject::tr("Source IP"));
smodel->setHeaderData(4,Qt::Horizontal,QObject::tr("Source Port"));
smodel->setHeaderData(5,Qt::Horizontal,QObject::tr("Protocol"));
smodel->setHeaderData(6,Qt::Horizontal,QObject::tr("Destination IP"));
smodel->setHeaderData(7,Qt::Horizontal,QObject::tr("Destination Port"));
ui->treeView->setModel(smodel);
void MainWindow::showPacket(QString pckt)
{
    QStringList columns= pckt.split("\t");
    if(columns.size()<8)
        return;
     QList<QStandardItem *> preparedRow =prepareRow(columns)  ;
     smodel->appendRow(preparedRow);
     ui->treeView->scrollToBottom();
}


QList<QStandardItem *> MainWindow::prepareRow(QStringList pckt)
{
    QList<QStandardItem *> rowItems;
    rowItems << new QStandardItem(pckt[0]);
    rowItems << new QStandardItem(pckt[1]);
    rowItems << new QStandardItem(pckt[2]);
    rowItems << new QStandardItem(pckt[3]);
    rowItems << new QStandardItem(pckt[4]);
    rowItems << new QStandardItem(pckt[5]);
    rowItems << new QStandardItem(pckt[6]);
    rowItems << new QStandardItem(pckt[7]);
    return rowItems;
} 
4

2 に答える 2